python子进程自定义返回码

时间:2018-03-28 15:51:33

标签: python subprocess

我想从python子进程调用中返回一个与返回的错误类型相对应的值。 E.g:

test.py

RETCODE_OK = 0
RETCODE_THING_1_FAILED = 1
RETCODE_THING_2_FAILED = 2

def main():
    return RETCODE_THING_2_FAILED

if __name__ == '__main__':
    main()

然后我用子进程调用它,如下所示:

>>> import subprocess
>>> proc = subprocess.Popen('python test.py', shell=True)
>>> proc.communicate()
(None, None)
>>> proc.returncode
0

我希望返回main()中返回的内容,在本例中为2.我还在stdout和stderr流中获得了其他内容,所以我不能{ {1}}并获取标准输出。

1 个答案:

答案 0 :(得分:3)

进程使用退出代码,而不是return语句。 您应该使用sys.exit(STATUS)而不是return STATUS声明:

test2.py:
---------
import sys

def main():
    sys.exit(RETCODE_THING_2_FAILED)

if __name__ == '__main__':
    main()

interpreter:
------------
>>> p = subprocess.Popen('python test2.py')
>>> p.communicate()
(None, None)
>>> p.returncode
2

这是因为进程实际上正在关闭/退出,而不是将值返回给另一个函数。