如何逐行读取标准输出?

Joh*_*ann 8 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();
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*tak 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)