用java获取正在运行的bash脚本的输出
这个问题在这里已经有了答案:
在你的情况下使用.wait(1000),是完全错误的。 这也是例外也告诉你的。
确切地说,你的用例有waitFor(long timeout, TimeUnit unit)
:
p.waitFor(10, TimeUnit.SECONDS);
以下是解决方案的完整示例。 一个单独的线程切换主线程的标志来终止然后输出收集的行:
private static boolean triggerToClose = false;
public static void main(String[] args) throws IOException,
InterruptedException {
ProcessBuilder pb =
new ProcessBuilder("/home/myscript");
Process p = pb.start();
java.io.InputStream is = p.getInputStream();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(is));
String inputRead;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
triggerToClose = true;
}
}).start();
StringBuilder sb = new StringBuilder();
while ((inputRead = stdInput.readLine()) != null) {
if (triggerToClose) {
p.destroy();
break;
}
sb.append(inputRead).append('n');
}
System.out.println(sb);
}
链接地址: http://www.djcxy.com/p/92139.html