我想检查来自流程的逐行标准输出。在读取第二行后,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();
}
答案 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;
}
}