2012-08-03 93 views
3
public static void executeCommand(String cmd) { 
    try { 
     Process process = Runtime.getRuntime().exec(cmd, null, 
       new File("/usr/hadoop-0.20.2/")); 
     InputStream stdin = process.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(stdin); 
     BufferedReader br = new BufferedReader(isr); 
     String line; 
     System.out.println("<output></output>"); 
     while ((line = br.readLine()) != null) 
      System.out.println(line); 
     InputStreamReader esr = new InputStreamReader(
       process.getErrorStream()); 
     BufferedReader errorReader = new BufferedReader(esr); 
     String lineError; 
     while ((lineError = errorReader.readLine()) != null) 
      System.out.println(lineError); 
     process.waitFor(); 
     System.out.println(""); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

這是我的代碼,用於執行名爲'cmd'的命令。但我無法通過此代碼獲得實時輸出。命令結束時輸出。我想要實時輸出。有沒有辦法做到這一點?我想實時輸出我的Runtime.getRuntime()。exec()

+0

請您澄清一下您的實時輸出與命令執行時的含義。你的意思就像'ls'產生的完整代碼清單? – Edmon 2012-08-03 03:13:52

回答

3

您所描述的問題很可能是你叫應用程序引起的:當連接到終端許多應用程序使用非緩衝I/O,但bufferen I /當連接到管道O操作。所以,你的cmd可以簡單地決定不寫它的輸出在小位,而是在大塊。正確的解決方法是調整命令,在適當的時間刷新其輸出。在Java方面你幾乎沒有辦法做到這一點。另見this answer

0

我認爲你需要有處理輸出的線程。

你應該首先嚐試與一會兒

上次運行CMD,當我嘗試用wvdial的命令(這wvdial的將無法完成,直到我們停下來),我需要一個線程來讀取輸出wvdial

相關問題