我想从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}}并获取标准输出。
答案 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
这是因为进程实际上正在关闭/退出,而不是将值返回给另一个函数。