4

我正在尝试使用以下代码重定向在 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>&1 <& - &”:java.io.IOException:错误=2,java.lang 中没有这样的文件或目录.ProcessBuilder.start(ProcessBuilder.java:460)

当我通过“/myScript”时它工作正常

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

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

4

2 回答 2

8

Shell 重定向运算符对于ProcessBuilder. 将您的命令放入 shell 脚本并执行它,如此处所示。或者,使用,如此bash -c所示。

于 2011-05-13T01:34:44.413 回答
1

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

于 2017-04-10T10:16:30.557 回答