从 Java 启动外部进程:stdout 和 stderr

Launching external process from Java : stdout and stderr

我正在使用标准 java.lang.Process 从 java 启动一个外部进程。 我试图弄清楚该过程的输出是什么,但格式是 stdoutstderr.

目前,我有 Process#getInputStream 可以访问 stdout,还有 Process#getErrorStream 可以访问 stderr。 这一切都很好,只是我们无法通过时间戳对 stdout 和 stderr 的输出进行排序。

假设这个过程有这样的输出:

Java 不会让我们知道 (B) 行写在 (A) 之后和 (C) 之前。 我想知道是否有任何方法可以合并外部进程的标准输出和标准错误,以便我们知道打印输出的顺序语句。

如果您使用 ProcessBuilder 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();