25

我想将 java 进程输出重定向到父 java 进程的标准输出。

使用 ProcessBuilder 类如下:

public static void main(String[] args) {
  ProcessBuilder processBuilder = new ProcessBuilder("cmd");
  processBuilder.directory(new File("C:"));   
  processBuilder.redirectErrorStream(true); // redirect error stream to output stream
  processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}

我本来希望“cmd”的输出类似于:

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。Tous droits réservés。

显示在用于运行 java 程序的 DOS 控制台中。但是在 DOS 控制台中什么也没有显示。

在讨论的其他线程中,我看到了使用 BufferedReader 类的解决方案:但在这里我希望进程的输出直接显示在标准输出中,而不使用任何 BufferedReader 或“读取时循环”。可能吗?

谢谢。

4

2 回答 2

26

尝试ProcessBuilder.inheritIO()使用与当前 Java 进程相同的 I/O。另外,您可以菊花链方法:

ProcessBuilder pb = new ProcessBuilder("cmd")
    .inheritIO()
    .directory(new File("C:"));
pb.start();
于 2015-01-20T10:15:02.423 回答
17

您确实错过了一个关键部分,您实际上需要开始您的流程并等待您的输出。我相信这会奏效,

processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
// Start the process.
try {
  Process p = processBuilder.start();
  // wait for termination.
  p.waitFor();
} catch (IOException e) {
  e.printStackTrace();
} catch (InterruptedException e) {
  e.printStackTrace();
}
于 2013-12-27T02:34:03.030 回答