對於某些終端命令,它們會重複輸出。例如,對於生成文件的東西,它可能會輸出完成的百分比。使用Java獲取終端命令的輸出
我知道如何使用
Process p = Runtime.getRuntim().exec("command goes here");
調用終端命令在Java中,但並沒有給我的命令的電流輸出的活飼料。我怎樣才能做到這一點,例如,我可以每100毫秒執行一次System.out.println()
,以查看過程的最新輸出結果。
對於某些終端命令,它們會重複輸出。例如,對於生成文件的東西,它可能會輸出完成的百分比。使用Java獲取終端命令的輸出
我知道如何使用
Process p = Runtime.getRuntim().exec("command goes here");
調用終端命令在Java中,但並沒有給我的命令的電流輸出的活飼料。我怎樣才能做到這一點,例如,我可以每100毫秒執行一次System.out.println()
,以查看過程的最新輸出結果。
您需要從進程讀取InputStream
,這裏有一個例子:
編輯我修改了代碼爲suggested here與stdInput
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
我試過了,但它似乎凍結在in.readLine()(它不輸出任何東西,但不會結束while循環) – CodeGuy 2013-02-16 21:33:39
也許你正在運行的命令不輸出任何\ r或\ n字符(這會告訴BufferedReader它已經讀完整一行)?也許它不會在某些終端模式下產生任何輸出(嘗試將結果輸送到「更多」並查看它輸出的內容)?也許該命令將其輸出寫入stderr而不是stdout? – dnault 2013-02-16 21:36:11
它會凍結等待輸入,所以你的進程不會用'newline'終止數據,或者根本不寫入'stdout' – iTech 2013-02-16 21:38:38
當然,它允許訪問STDOUT和STDERR。見http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html – home 2013-02-16 21:30:03
謝謝你。那麼,你能舉一個例子來說明如何使用它來每100毫秒獲得輸出嗎? – CodeGuy 2013-02-16 21:30:48
請參閱http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream – home 2013-02-16 21:32:03