2011-05-13 105 views
3

我试图重定向过程的输出开始的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(); 

但与例外的线程失败

异常“主要” 的java .io.IOException:无法运行 程序 “/ myScript >> /myLogFile 2> & - & “:java.io.IOException异常: 错误= 2,在 java.lang.ProcessBuilder.start(ProcessBuilder.java:460)没有这样的文件或目录

时,我只是通过它工作正常”/ myScript“

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

我试过将它们全部作为独立参数传递,如new ProcessBuilder("/myScript",">>","/myLogFile"),它会执行,但它不会重定向到日志文件,也不会使用envVars。

回答

6

壳牌重定向运营商不知道ProcessBuilder。将你的命令放在一个shell脚本中并执行它,如here所示。或者,使用bash -c,如here所示。

+2

是的,谢谢,看起来像Java 7将有能力明确指定重定向。 – Chandra 2011-05-13 02:12:14

0

作为指定,从Java7可以继续使用的ProcessBuilder与仅可执行文件作为参数并重定向/截距其输出流,使用redirectInput()redirectOutput()和从ProcessBuilderredirectError()