【问题标题】:ProcessBuilder redirecting outputProcessBuilder 重定向输出
【发布时间】:2011-05-13 01:23:04
【问题描述】:

我正在尝试使用以下代码重定向在 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:无法运行 程序 "/我的脚本 >> /我的日志文件 2>&1

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

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

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

【问题讨论】:

标签: java process processbuilder


【解决方案1】:

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

【讨论】:

  • 是的,谢谢,看起来 Java 7 将具有明确指定重定向的能力。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2020-11-07
    • 2012-07-19
    相关资源
    最近更新 更多