【发布时间】:2011-12-07 03:51:52
【问题描述】:
我想从一个长时间运行的 shell 命令中获取输出,因为它是可用的,而不是等待命令完成。我的代码在新线程中运行
Process proc = Runtime.getRuntime().exec("/opt/bin/longRunning");
InputStream in = proc.getInputStream();
int c;
while((c = in.read()) != -1) {
MyStaticClass.stringBuilder.append(c);
}
问题是我在 /opt/bin/longRunning 中的程序必须在 InputStream 被分配和读取之前完成。有什么好的方法可以异步执行此操作吗?我的目标是 ajax 请求将返回当前值 MyStaticClass.stringBuilder.toString() 每秒左右。
我被困在 Java 5 上,仅供参考。
谢谢! W
【问题讨论】:
-
谢谢大家! Apache Commons 的 Exec 是我的选择。 @Paul Cager,您还提供了一个绝妙的主意。被调用的脚本实际上是检测到它正在被管道和阻塞。但是,您从 Runtime.exec 获得的流是同步的,因此如果您尝试读取它,它就会阻塞。
标签: java ajax asynchronous struts runtime.exec