如何逐行读取标准输出?

时间:2014-01-09 17:43:35

标签: c# process redirectstandardoutput

我想检查来自流程的逐行标准输出。在读取第二行后,myProcess.StandardOutput.EndofStream从false变为true。因此它从while循环退出。也许我应该用别的东西?

Process myProcess = new Process();
try
{
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.FileName = my_command;
    myProcess.StartInfo.Arguments = " "+ location;
    myProcess.StartInfo.CreateNoWindow = true;
    myProcess.StartInfo.RedirectStandardOutput = true;
    myProcess.Start();

    while (!myProcess.StandardOutput.EndOfStream)
    {
        string standard_output = myProcess.StandardOutput.ReadLine();
        if (standard_output.Contains("xx"))
        {
           //do something

            break;
        }
    }

    myProcess.WaitForExit();
}

1 个答案:

答案 0 :(得分:16)

从StandardOutput读取与读取具有明确端点的文件不同。连接到StandardOutput的StreamReader可以在进程退出之前到达EndOfStream(意味着已读取所有可用输出)。

然而,

ReadLine将等待数据可用或流关闭。当流关闭时,ReadLine将返回null。

重写主循环以使用ReadLine的阻塞I / O作为等待条件:

    string standard_output;
    while ((standard_output = myProcess.StandardOutput.ReadLine()) != null) 
    {
        if (standard_output.Contains("xx"))
        {
            //do something
            break;
        }
    }