在其他语言(如bash和Python)中,当我们生成子进程时,这个新进程将从父进程继承stdout和stderr.这意味着子进程的任何输出都将打印到终端以及父进程的输出.
我们如何在Java中实现相同的行为?
我的第一次尝试是:
proc = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
但它不会起作用.基于这个答案和这个答案,我已经用以下代码替换了代码:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
Run Code Online (Sandbox Code Playgroud)
但是这甚至都没有编译,因为参数与预期的方法参数不兼容.
hen*_*nry 16
您需要读取您创建的进程的输出和错误流,并将输出写入您希望的位置(在您的情况下为System.out和System.err).
编辑.上面的答案对于java <7是正确的.从javadoc开始,它看起来可以代替调用
processBuilder.redirectOutput(Redirect.INHERIT)
Run Code Online (Sandbox Code Playgroud)