Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 ProcessBuilder已重定向到标准输出_Java_Redirect_Stream_Processbuilder_Inheritance - Fatal编程技术网

Java ProcessBuilder已重定向到标准输出

Java ProcessBuilder已重定向到标准输出,java,redirect,stream,processbuilder,inheritance,Java,Redirect,Stream,Processbuilder,Inheritance,我想将java进程输出重定向到父java进程的标准输出 按如下方式使用ProcessBuilder类: public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder("cmd"); processBuilder.directory(new File("C:")); processBuilder.redirectErrorStream(true); // re

我想将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微软公司。我们享有服务权

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

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


谢谢。

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

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

请尝试使用与当前Java进程相同的I/O。此外,您还可以选择以下方法:

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

查看系统类的API以获取所需的方法:
setOut(…)
setIn(…)
setErr(…)
。这些方法应该可以工作。我不明白为什么它不会。我自己只需要一个脚注——如果你太快调用
pb.destroy()
,你将无法打印任何内容(即使你调用
System.out.flush()
);