2016-03-14 102 views
1

我正在嘗試編寫Java程序來運行終端命令。谷歌搜索和SO讓我到這裏:通過Java運行的一些終端命令在Linux中不顯示輸出

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

public class Detector { 
    public static void main(String[] args) { 

     String[] cmd = {"ls", "-la"}; 
     try { 
      Process p = Runtime.getRuntime().exec(cmd); 

      BufferedReader reader = new BufferedReader(
       new InputStreamReader(p.getInputStream())); 

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

     } catch (IOException | InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

到目前爲止,這麼好。問題是,如果我嘗試通過

String[] cmd = {"python", "-V"};

程序將運行到運行像「蟒蛇-V」命令,但沒有輸出實際上被打印出來。有任何想法嗎?

+0

'python -V'默認寫入STDERR,而不是STDOUT。 將其更改爲'python -V 2>&1'應該可行,但我確定有一些方法可以在沒有'2>&1'部分的Java中執行此操作。 – Munir

回答

2

運行python -V時,您在命令行上看到的輸出實際上是打印到標準錯誤。爲了捕捉這一點,你需要使用不同的InputStream,比如這個:

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

你的代碼的其餘部分是好的。

+0

嘿,那就是訣竅!非常感謝。奇怪它是如何做到的。 –

相關問題