读取控制台应用程序的输出

时间:2018-07-05 19:58:34

标签: c# .net

我正在尝试捕获从.net应用程序启动的外部程序(其控制台应用程序)的输出。这是开始的方式。

var process = new Process();
process.StartInfo = new ProcessStartInfo
{
    FileName = "c:\app.exe,
    Arguments = "-x 0 -server http://foo.com",
    RedirectStandardOutput = true,
    RedirectStandardInput = true,
    RedirectStandardError = true,
    UseShellExecute = false
};
process.Start();
process.OutputDataReceived += Process_OutputDataReceived;
process.ErrorDataReceived += Process_ErrorDataReceived;
process.BeginOutputReadLine();
process.WaitForExit();

此控制台应用程序一直运行到手动停止,并不断向控制台窗口中写入内容。我想做的是从控制台捕获输出,如果有一行,如果说“ ERROR”,我将重新启动该过程。

上面的代码不起作用。仅当我关闭app.exe控制台窗口时才会调用Process_OutputDataReceived。 我想我可以将输出写入某个文件并分析该文件,但是我对此不太喜欢,因为我需要每秒打开/读取该文件。

在将app.exe的输出写入控制台时,是否有办法捕获它?

编辑:

将输出写入文件是选项,但是文件会变得非常非常大,直到我收到“ ERROR”一行,只有到那时我才会重新启动该过程并删除文件。每秒打开/读取几张100MB +的文件,直到那时才不是我想要的方式。

1 个答案:

答案 0 :(得分:0)

在您的Process_OutputDataReceived方法实现中,在如下数据中查找“ ERROR”:

parent