2013-02-16 64 views
3

對於某些終端命令,它們會重複輸出。例如,對於生成文件的東西,它可能會輸出完成的百分比。使用Java獲取終端命令的輸出

我知道如何使用

Process p = Runtime.getRuntim().exec("command goes here"); 

調用終端命令在Java中,但並沒有給我的命令的電流輸出的活飼料。我怎樣才能做到這一點,例如,我可以每100毫秒執行一次System.out.println(),以查看過程的最新輸出結果。

+0

當然,它允許訪問STDOUT和STDERR。見http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html – home 2013-02-16 21:30:03

+0

謝謝你。那麼,你能舉一個例子來說明如何使用它來每100毫秒獲得輸出嗎? – CodeGuy 2013-02-16 21:30:48

+1

請參閱http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream – home 2013-02-16 21:32:03

回答

1

您需要從進程讀取InputStream,這裏有一個例子:

編輯我修改了代碼爲suggested herestdInput

ProcessBuilder builder = new ProcessBuilder("command goes here"); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 
InputStream is = process.getInputStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

String line = null; 
while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
} 

收到errStream爲了調試的目的,你可以將輸入讀取爲字節而不是使用readLine,以防止進程不終止消息,並且newLine

+0

我試過了,但它似乎凍結在in.readLine()(它不輸出任何東西,但不會結束while循環) – CodeGuy 2013-02-16 21:33:39

+0

也許你正在運行的命令不輸出任何\ r或\ n字符(這會告訴BufferedReader它已經讀完整一行)?也許它不會在某些終端模式下產生任何輸出(嘗試將結果輸送到「更多」並查看它輸出的內容)?也許該命令將其輸出寫入stderr而不是stdout? – dnault 2013-02-16 21:36:11

+0

它會凍結等待輸入,所以你的進程不會用'newline'終止數據,或者根本不寫入'stdout' – iTech 2013-02-16 21:38:38