【问题标题】:How to automatically get returncode from Popen after terminating child process?终止子进程后如何从 Popen 自动获取返回码?
【发布时间】:2013-05-30 22:53:07
【问题描述】:

我有一个 Python 3 问题。如何在子进程终止后自动从 Popen 对象获取返回码?

简而言之,我需要一个应用程序等待,但不能无响应(如果可能的话),直到子进程结束,然后根据返回码自动调用一个函数。

【问题讨论】:

  • 您使用的是 GUI 框架吗?如果有,是哪一个?
  • 实际上,我不完全确定如何回答这个问题,因为我正在为 Blender(一个 3D 建模应用程序)编写脚本。我可以问你为什么问吗? :D
  • 在 GUI 中,为了保持响应,您需要继续处理传入事件(鼠标点击等),而处理方式取决于您的 GUI。
  • 快速浏览一下 blender 的文档表明,没有办法在长时间运行任务的同时保持响应。因此,如果 @Ryan 的解决方案反应不够灵敏,那么您就会被它困住。

标签: python python-3.x popen


【解决方案1】:

以下“可能”是您要查找的内容,但可能我不太明白您想要什么。

import subprocess
child = subprocess.Popen(do_something_here)
streamdata = child.communicate()[0]
rc = child.returncode

您可以在此处找到更多相关信息:

http://docs.python.org/2/library/subprocess.html#subprocess.Popen.returncode

如果我误解了您的问题,请告诉我,我会尽力为您提供更多帮助。

【讨论】:

  • 我认为您的意思是 child.returncode 而不是 return.code
  • 嗯。是的,这行得通。不过,我不完全理解为什么。通过调用communicate(),等待进程结束再分配child.returncode?​​span>
  • @swingsoneto,这正是发生的事情。 communicate() 等待进程退出后再返回。
  • @SethMMorton - 是的,我很抱歉。我已经修正了错字。
  • 谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-04-01
  • 2015-06-15
  • 2017-08-22
  • 2019-01-02
  • 2019-08-04
  • 1970-01-01
  • 2021-06-20
  • 2018-12-21
相关资源
最近更新 更多