"使用ProcessBuilder进行输出重定向"
P粉517090748
P粉517090748 2023-08-24 20:26:08
[MySQL讨论组]

我正在尝试使用以下代码将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: Cannot run program "/myScript >> /myLogFile 2>&1 <& - &": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

当我只传递"/myScript"时,它正常工作。

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

我尝试将它们作为单独的参数传递,例如new ProcessBuilder("/myScript",">>","/myLogFile"),它可以执行,但不会重定向到日志文件,也不会接受envVars。

P粉517090748
P粉517090748

全部回复(2)
P粉204079743

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

P粉818088880

Shell重定向操作符在ProcessBuilder中是未知的。将您的命令放在一个shell脚本中并执行它,如这里所示。或者,使用bash -c,如这里所示。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号