3

我写了一个负责执行其他脚本的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()

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

4

2 回答 2

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))
于 2015-04-27T14:15:27.663 回答
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)
于 2015-04-27T14:19:37.053 回答