2014-09-03 144 views
0

我需要使用Java自動運行strace(當然,在linux系統上)。 所以,當我執行類似:運行strace並使用Java獲取輸出

strace -f echo hi 

我得到的輸出:

hi 

然而,當我在終端運行命令我得到的通常的輸出(和系統調用一切)。 我有這個解決方案,我使用「-o」標誌將strace輸出重定向到一個文件,然後讀取文件以獲得輸出,但這對我來說已經不再適用了。 所以我不明白,我做錯了什麼?

這裏是我執行命令代碼:

System.out.println(exec("strace -f -q echo hi")); 

private String exec(String cmd) { 

    StringBuffer sb = new StringBuffer(); 
    try { 
     Process p = Runtime.getRuntime().exec(cmd); 
     BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = ""; 
     while((line = input.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return sb.toString(); 
} 

很抱歉,如果我有一個錯字的地方,我用手複製此。 謝謝!

+1

有什麼實際的問題,沒有輸出? – heikkim 2014-09-03 11:01:00

+0

我得到'echo hi'的輸出。不是strace的輸出。就像我根本不使用strace。 – Shtut 2014-09-03 11:04:17

回答

1

我認爲strace把它輸出到STDERR。

因此,解決辦法是:

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