从 Java 启动外部进程:stdout 和 stderr
Launching external process from Java : stdout and stderr
我正在使用标准 java.lang.Process
从 java 启动一个外部进程。
我试图弄清楚该过程的输出是什么,但格式是 stdout
和 stderr
.
目前,我有 Process#getInputStream
可以访问 stdout
,还有 Process#getErrorStream
可以访问 stderr
。
这一切都很好,只是我们无法通过时间戳对 stdout 和 stderr 的输出进行排序。
假设这个过程有这样的输出:
- 一行 (A) 写入标准输出
- 一行(B)写入stderr
- 一行 (C) 写入标准输出
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();
我正在使用标准 java.lang.Process
从 java 启动一个外部进程。
我试图弄清楚该过程的输出是什么,但格式是 stdout
和 stderr
.
目前,我有 Process#getInputStream
可以访问 stdout
,还有 Process#getErrorStream
可以访问 stderr
。
这一切都很好,只是我们无法通过时间戳对 stdout 和 stderr 的输出进行排序。
假设这个过程有这样的输出:
- 一行 (A) 写入标准输出
- 一行(B)写入stderr
- 一行 (C) 写入标准输出
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();