您的位置:首页 > 其它

Runtime exec: 读InputStream & ErrorStream 没反应

2013-11-14 19:27 453 查看
用Runtime exec 执行一个命令时,我希望能读出命令的输出和error,于是我先读Input, 再读error

Process p = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
BufferedReader error = new BufferedReader(new InputStreamReader(
p.getErrorStream()));

String line = reader.readLine();
while (line != null) {
output = output + line + "\n";
line = reader.readLine();
}
reader.close();

while ((line = error.readLine()) != null) {
System.out.println("ERROR: " + line);
}
error.close();


可是,用以上的代码执行程序,有时候程序会hang,一直卡在reader.readLine()这一行。

查了一下,原因是程序运行时在写stdout之前先写了stderr,所以以上的代码“假死”的原因是在没有读取stderr的情况下先读stdoutput,以致被block

解决方法可以是用thread并行读取stdout/err,或者可以看一下Apache Commons Exec这个库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: