首页 > 解决方案 > 读取控制台应用程序的输出

问题描述

我正在尝试捕获从 .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();

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

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

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

编辑:

将输出写入文件是选项,但文件可能会变得非常非常大,直到我得到一行“错误”,只有在那时我才会重新启动进程并删除文件。在此之前每秒打开/读取几个 100MB 以上的文件并不是我想要的方式。

标签: c#.net

解决方案


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

 private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data == "ERROR")
            {
                //Restart your App
            }
        }

推荐阅读