ProcessBuilder 已重定向到标准输出

我想将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”的输出是这样的:

微软视窗 [版本 6.1.7601] 版权所有 (c) 2009 微软公司。Tous droits réservés.

显示在用于运行 java 程序的 DOS 控制台中。但是 DOS 控制台中根本没有显示任何内容。

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

谢谢。


答案 1

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

ProcessBuilder pb = new ProcessBuilder("cmd")
    .inheritIO()
    .directory(new File("C:"));
pb.start();

答案 2

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

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();
}