【问题标题】:Detecting if a process exits cleanly with Python subprocess使用 Python 子进程检测进程是否干净地退出
【发布时间】:2015-07-06 01:09:43
【问题描述】:

我编写了一个 python 脚本,负责执行其他脚本。 我确实注意到时不时地,我得到一个已失效的进程。

我正在阅读 StackOverFlow 上的其他一些帖子,他们说如果不使用 .communicate.call,你会发现问题。

我现在唯一苦苦挣扎的是,我还需要获取进程的退出代码。

我的代码如下。

job.append("py")
job.append("\tmp\test\sleep.py")
job.append("20")
p = subprocess.Popen(job, stderr=subprocess.PIPE,stdout=subprocess.PIPE)
exit_code_main = p.wait()

我需要从子流程的执行中获取所有输出,如果有错误输出,我需要获取。退出代码是我用来判断子进程中的脚本是否执行成功的。

【问题讨论】:

  • “我正在阅读 StackOverFlow 上的一些其他主题...” 我也想阅读这些内容。有链接吗?
  • 可以从pprint p.returncode获取退出码

标签: python subprocess defunct


【解决方案1】:

您可以使用 check_output 来捕获任何非零退出状态:

from subprocess import check_output, CalledProcessError
try:
    out = check_output(job)
except CalledProcessError as e:
    print(e.returncode)
    print(e.message)
else:
    print(out)

【讨论】:

    【解决方案2】:

    这是一个如何使用subprocess 捕获标准输出、标准错误和退出代码的示例:

        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
        stdout, stderr = p.communicate()
    
        logger.info("Executed notification script %s, exit code %d", args, p.returncode)
        logger.info("stdout: %s", stdout)
        logger.info("stderr: %s", stderr)
    
        if p.returncode != 0:
            raise RuntimeError("The script did not exit cleanly: {}".format(args))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多