我正在使用标准从 java 启动一个外部进程java.lang.Process
。
我试图弄清楚该过程的输出是什么,但是采用结合了两者的格式stdout
and stderr
.
目前,我有Process#getInputStream
它提供了访问stdout
, and Process#getErrorStream
它提供了访问stderr
。
这一切都很好,只是我们无法按时间戳对 stdout 和 stderr 的输出进行排序。
假设该过程有如下输出:
- 一行 (A) 写入标准输出
- 写入 stderr 的一行 (B)
- 写入 stdout 的一行 (C)
Java 不允许我们知道行 (B) 是在 (A) 之后和 (C) 之前编写的。
我想知道是否有任何方法可以合并外部进程的 stdout 和 stderr,以便我们知道语句打印到输出的顺序。
如果您使用ProcessBuilder https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.htmlAPI 而不是普通的 Runtime.exec(),那么您可以重定向输出和错误流,包括将它们重定向到同一流。
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
pb.redirectErrorStream(true); // merges err with out
pb.redirectOutput(Redirect.appendTo(new File("out.txt")));
Process p = pb.start();
p.waitFor();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)