ProcessBuilder重定向输出

时间:2011-05-13 01:23:04

标签: java process processbuilder

我正在尝试使用以下代码

重定向在ProcessBuilder的帮助下启动的进程的输出
ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Process p = pb.start();

但它失败了,例外

  

线程“main”中的异常    java.io.IOException:无法运行    程序    “/ myScript&gt;&gt;    / myLogFile    2&gt;&amp; 1&lt;&amp; - &amp;“:java.io.IOException:   error = 2,没有这样的文件或目录   java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

当我传递“/ myScript”

时,它工作正常

脚本是perl,关于它为什么失败的任何建议/评论?

我尝试将所有这些作为单独的参数传递,例如new ProcessBuilder("/myScript",">>","/myLogFile"),它会执行,但它不会重定向到日志文件,也不会使用envVars。

2 个答案:

答案 0 :(得分:6)

ProcessBuilder不知道Shell重定向运算符。将命令放在shell脚本中并执行它,如图here所示。或者,使用bash -c,如图所示here

答案 1 :(得分:0)

正如您所指定的,从Java7开始,您可以继续使用ProcessBuilder,将唯一的可执行文件作为参数,并使用来自{{1的redirectInput() redirectOutput()redirectError()来重定向/拦截其输出流}。class。