2014-01-09 309 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; 
     } 
    }