2012-06-07 121 views
1

我想用Java執行操作系統命令,然後打印出它的返回值。就像這樣:將操作系統命令的輸出寫入控制檯

這就是我想...

String location_of_my_exe_and_some_parameters = "c:\\blabla.exe /hello -hi"; 
Runtime.getRuntime().exec(location_of_my_exe_and_some_parameters); 

我試圖把一個是System.out.print()在我運行...行的開頭,但失敗了。因爲,顯然,getRuntime() returns a Runtime object

現在,問題是,當我在命令行執行「blabla.exe/hello -hi」命令時,我得到如下結果:「您執行了一些命令,歡呼!」。但是,在Java中,我一無所獲。

我試圖把返回值放入一個Runtime對象,一個Object對象。但是,他們都失敗了。我怎樣才能做到這一點?

問題就迎刃而解了 - 這是我的解決方案

Process process = new ProcessBuilder(location, args).start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 

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

回答

1

注意Runtime.exec(...)返回Process對象。你可以使用這個對象來捕捉它的輸入流和檢索不管它打印到標準輸出:

Process p = Runtime.getRuntime().exec(location_of_my_exe_and_some_parameters); 
InputStream is = p.getInputStream(); 

// read process output from is 
+0

非常感謝你。感謝您親切,禮貌和快速。 –

+1

@John Doe:確保標記對您最有幫助的答案,以便將來讀者快速找到答案。 – Tudor

+0

我認爲我不能標記或投票。我沒有足夠的「業力」。 –

1

您可以捕捉使用此命令的輸出:

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(command); 
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String line=null; 

while((line=input.readLine()) != null) { 
    log.info(line); 
} 
    //This will wait for the return code of the process 
int exitVal = pr.waitFor(); 
+0

非常感謝。 –

0

UseProcessBuilder,而不是運行。

像:

Process process = new ProcessBuilder("c:\\blabla.exe","param1","param2").start();

答:

Process process = new ProcessBuilder("c:\\blabla.exe","/hello","-hi").start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 

System.out.printf("Output of running %s is:", Arrays.toString(args)); 
+0

非常感謝。 –

相關問題