ProcessBuilder:转发stdout和stderr启动进程而不阻塞主线程
我正在使用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
,然后调用适当的write()
方法System.out
。
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();
虽然这种方法很有效,但感觉有点脏。最重要的是,它为我提供了一个正确管理和终止的线程。有没有更好的方法来做到这一点?
慕的地6264312
HUX布斯
相关分类