2012-11-08 178 views
1

我正在嘗試使用BufferedReader讀取進程的輸出。當我嘗試從進程讀取輸出

Process p=Runtime.getRuntime().exec("nslookup 10.123.30.130"); 
p.waitFor(); 
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line=reader.readLine(); 
while(line!=null) 
{ 
    System.out.println(line); 
    line=reader.readLine(); 
} 

輸出

Server: <edited server details> 
Address: <edited address details> 

,而過程中的控制檯實際產量:

Server: <details edited> 
Address: <details edited> 

Name: <details edited> 
Address: <details edited> 

(注:我已編輯對安全的實際輸出原因)

我的觀察結果是,在閱讀前兩行後,返回null,因此流結束。有什麼辦法可以得到全部四條線?


更新: 第三空行被解釋爲空。但是,如果我爲Process p=Runtime.getRuntime().exec("cmd /c dir");嘗試相同的程序,即使有新行,我也會得到與控制檯中完全一樣的輸出。

+0

我以爲你想讀取輸出! ** p.getOutputStream ** –

+0

也許中間的空行被解釋爲空? – mxns

+0

1)閱讀[exec tag Wiki]鏈接的文章(http://stackoverflow.com/tags/runtime.exec/info)並執行所有建議。這可能會導致解決眼前的問題,但也.. 2)使用'ProcessBuilder',使它更容易實現點(1)和.. 3)提供參數作爲一個數組。例如。 ' 「NSLOOKUP」, 「10.123.30.130」'。 –

回答

0

也讀取錯誤緩衝區。

BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

String errorLine; 
while((errorLine = stdError.readLine()) != null){ 
    System.out.println(errorLine); 
} 

你會看到有一個錯誤,NSLOOKUP無法解析您的IP地址域。使用主機名稱而不是IP地址。