Java ProcessBuilder已重定向到标准输出
我想将java进程输出重定向到父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
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()
);