java – 使用subprocess.Popen的奇怪执行模式
我有一个Python脚本,其中调用了JAR.调用JAR后,将调用两个shell脚本.最初我这样做:
我必须等待前两个进程完成所以我使用Popen()和最后一个我可以让它在后台运行,所以我调用()它.我传递shell = True,因为我希望被调用的shell脚本可以访问环境变量. 但是,上面的工作,我没有从JAR进程中获取任何日志记录.我试过这样称呼它:
这是我所期望的日志,但后面的两个shell脚本不会被执行.最初我认为日志不是stdout,但事实证明它们根本没有被执行. I.E.不删除多余的文件或推送到数据库. 为什么后续shell脚本被忽略? 最佳答案
如果您确定您的shell脚本根本没有运行,并且第一个代码一切正常 – 那么它必须是java命令死锁或不使用call()函数正确终止.
您可以通过在bash脚本中添加虚拟文件来验证这一点.把它放在脚本的第一行,所以如果它被执行,你将获得创建的虚拟文件.如果它没有创建,那意味着脚本没有被执行,可能是由于java执行的某些东西. 我会尝试几件事: 首先,我会返回Popen而不是打电话.而不是使用wait(),使用communic():
确保检查两个数据流(stdout和stderr).您可能会错过java进程引发的错误. 接下来我会尝试通过向Popen提供bufsize = 0来禁用缓冲区.它将消除与python缓冲相关的选项. 如果两个选项仍然不起作用,请尝试使用check_call()查看是否存在异常:
这些选项可能有答案;如果没有,他们会帮助调试过程.随意评论这一进展如何. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 可折叠解决方案的岩纸剪刀
- RxJava2.x+ReTrofit2.x多线程下载文件的示例代码
- java – GRAPH:找到一个算法来确定矩形迷宫中从一个点到另
- 浅谈Spring Boot 整合ActiveMQ的过程
- 是否有用于解决年金问题的Java API或内置函数?
- Java Lombok:在@AllArgsConstructor中省略一个字段?
- Java 8嵌套循环流
- 获取Android手机信息的工具类PhoneHelper
- java – 动态更改jasper的textFieldExpression的class属性
- 为什么我在1.8.0_45中得到java.lang.NoSuchMethodError:cr