Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java启动外部进程:stdout和stderr_Java_Process - Fatal编程技术网

从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)
Java不允许我们知道(B)行是在(A)之后和(C)之前编写的。 我想知道是否有任何方法可以合并外部进程的stdout和stderr,以便我们知道输出的顺序语句。

如果使用API而不是普通的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();

ProcessBuilder.redirectErrorStream(true);未按预期工作-在我的电脑(Windows 10,Java 8)上,当外部执行perl程序时,所有警告和错误消息都会显示在任何其他输出之前,无论实际顺序是什么,也不管是否预先输入cmd/c,从批内执行或否,甚至在批内重定向开关2>&1都没有帮助,这些过程的输出是不能用Java捕获的吗?因为在其他情况下,这些是您将按顺序标记到日志文件magdute中的日志级别,所以这看起来不像是对原始问题的回答。你是在试图找到你自己问题的答案吗?如果是,那么您应该创建一个单独的问题。