C#进程在控制台中查看输出并同时获取它的副本

时间:2015-02-12 08:00:02

标签: c# process stdout stderr

我正在编写一个对其他应用程序进行分析的应用程序, 用户可以选择他想要分析的应用程序并运行它... 一个控制台将被打开,他将看到他的应用程序进度(输出),并将能够随时停止他的应用程序(通过关闭控制台)。

在我这边(运行分析的应用程序),我需要获取用户的应用程序输出(stdout& stderr)并在其上运行一些解析。

总结一下:

(1)用户的应用程序必须在新的控制台窗口中运行,以便用户可以通过关闭新控制台随时停止分析。

(2)用户必须能够在控制台中查看他的应用程序输出,以了解何时停止它。

(3)“父”应用程序需要该输出的副本(实时与否无关)。

尝试重定向流 - 使(3)工作,但(2)不工作..

那么如何在一次运行中同时实现上述所有3个请求? 任何想法??

1 个答案:

答案 0 :(得分:0)

好吧,如果有人对解决方案感兴趣,那就明白了:

StringBuilder outStr = new StringBuilder("");
StringBuilder errStr = new StringBuilder("");

process.Start();
process.OutputDataReceived += (sendingProcess, outLine) =>
{
    outStr.AppendLine(outLine.Data);
    Console.Out.WriteLine(outLine.Data); // echo the output
};

process.ErrorDataReceived += (sendingProcess, errorLine) =>
{
    errStr.AppendLine(errorLine.Data);
    Console.Error.WriteLine(errorLine.Data); // echo the error
};

process.BeginOutputReadLine();
process.BeginErrorReadLine();