ProcessBuilder重定向输出

4
我正在尝试使用以下代码重定向通过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();

但是它出现了异常

Exception in thread "main" java.io.IOException: 无法运行程序 "/myScript >> /myLogFile 2>&1 <& - &": java.io.IOException: 错误=2,没有那个文件或目录 at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

当我仅传递“/myScript”时,它可以正常工作。

脚本是perl,对于为什么会失败有什么建议/注释?

我尝试将所有参数分开传递,例如new ProcessBuilder("/myScript",">>","/myLogFile"),它执行了,但它不会重定向到日志文件,也不会接受envVars。


请查看 https://dev59.com/XWYq5IYBdhLWcg3w0T5y#65649701 - Abhijit Sarkar
2个回答

8

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


2
谢谢,看起来Java 7将具有明确指定重定向的功能。 - Chandra

1

根据您的要求,在Java7中,您可以继续使用ProcessBuilder,并将唯一的可执行文件作为参数,并使用ProcessBuilder类中的redirectInput()redirectOutput()redirectError()重定向/拦截其输出流。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接