2014-09-03 147 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()));