从Java启动外部进程:stdout和stderr
我正在使用标准的从Java启动外部进程:stdout和stderr,java,process,Java,Process,我正在使用标准的java.lang.process从java启动一个外部进程。 我试图弄清楚这个过程的输出是什么,但是它的格式是结合了stdout和stderr 目前,我有Process#getInputStream,它提供对stdout的访问,还有Process#getErrorStream提供对stderr的访问。 这一切都很好,只是我们不能根据stdout和stderr的时间戳对其输出进行排序 假设流程有如下输出: 写入标准输出的一行(A) 写入stderr的一行(B) 写入标准输出的一
java.lang.process
从java启动一个外部进程。
我试图弄清楚这个过程的输出是什么,但是它的格式是结合了stdout
和stderr
目前,我有Process#getInputStream
,它提供对stdout
的访问,还有Process#getErrorStream
提供对stderr
的访问。
这一切都很好,只是我们不能根据stdout和stderr的时间戳对其输出进行排序
假设流程有如下输出:
- 写入标准输出的一行(A)
- 写入stderr的一行(B)
- 写入标准输出的一行(C)
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();
ProcessBuilder.redirectErrorStream(true);未按预期工作-在我的电脑(Windows 10,Java 8)上,当外部执行perl程序时,所有警告和错误消息都会显示在任何其他输出之前,无论实际顺序是什么,也不管是否预先输入cmd/c,从批内执行或否,甚至在批内重定向开关2>&1都没有帮助,这些过程的输出是不能用Java捕获的吗?因为在其他情况下,这些是您将按顺序标记到日志文件magdute中的日志级别,所以这看起来不像是对原始问题的回答。你是在试图找到你自己问题的答案吗?如果是,那么您应该创建一个单独的问题。