最佳答案
我正在使用 ProcessBuilder 用 Java 构建一个流程,如下所示:
ProcessBuilder pb = new ProcessBuilder()
.command("somecommand", "arg1", "arg2")
.redirectErrorStream(true);
Process p = pb.start();
InputStream stdOut = p.getInputStream();
现在我的问题是这样的: 我希望捕获通过该进程的 stdout 和/或 stderr 的任何内容,并将其异步重定向到 System.out
。我希望进程及其输出重定向在后台运行。到目前为止,我发现做到这一点的唯一方法是手动生成一个新线程,该线程将持续从 stdOut
读取,然后调用 System.out
的适当 write()
方法。
new Thread(new Runnable(){
public void run(){
byte[] buffer = new byte[8192];
int len = -1;
while((len = stdOut.read(buffer)) > 0){
System.out.write(buffer, 0, len);
}
}
}).start();
虽然这种方法有点效果,但感觉有点肮脏。最重要的是,它给了我一个线程来管理和正确终止。还有更好的办法吗?