如何重定向输出以及同时在shell屏幕上获取输出

时间:2010-08-31 04:40:25

标签: c#

这是windows-application-form代码;我希望将要执行的批处理文件显示我在RedirectStandardOutput = false;获得的shell屏幕上的输出,但我还希望输出同时重定向到日志文件。为此,我使用RedirectStandardOutput = true;

当然,一次只能使用一个!

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = "c:\test\build.bat"; 

p.StartInfo.UseShellExecute = false; 

p.StartInfo.RedirectStandardOutput = true; // if I use false all the commented lines below are not applicable for comments

p.Start(); 

string output = null; 
//try 
//{ 

output = p.StandardOutput.ReadToEnd(); 

//} 
//catch (Exception ex) 
//{ 
//    MessageBox.Show(ex.ToString()); 
//} 

System.IO.File.WriteAllText("c:\test\log.txt", output); 

2 个答案:

答案 0 :(得分:0)

捕获输出并自行将其打印到屏幕上。这就是tee命令在大多数非Windows操作系统上满足此需求的方式。

答案 1 :(得分:0)

您可以尝试这样的事情:

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = "c:\test\build.bat"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
p.Start(); 

在代码中的某处有一个事件处理程序:

private static void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{   
    if (!String.IsNullOrEmpty(outLine.Data))
    {
        Console.WriteLine(outLine.Data);
         System.IO.File.AppendAllText("c:\test\log.txt", outLine.Data); 
    }
}

取自MSDN: Process.BeginOutputReadLine Method的示例。

这样可以更有效地保持文件打开以进行写入,甚至缓冲它,但这会使示例保持简短。