2014-01-09 219 views
8

我想逐行检查过程的标准输出。读取第二行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(); 
} 

回答

11

从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; 
     } 
    }