如何使用子进程获取返回码



所以我正在尝试执行一个文件并使用子进程库中可用的python内置方法取回返回的值。

例如,假设我想执行这个hello_world python文件:

def main():
print("in main")
return("hello world!")
if __name__ == '__main__':
main()

我不在乎取回声明in main.我想得到的是返回值hello world!

我尝试了很多东西,但没有一个奏效。

以下是我尝试过的内容及其输出的列表:

args 在所有试验中都很常见:args = ['python',hello_cmd]

第一次试用:

p1 = subprocess.Popen(args, stdout=subprocess.PIPE)
print(p1.communicate())
print("returncode is:")
print(p1.returncode)

输出为:

(b'in mainn', None)
returncode is:
0

第二次审判:

p2 = subprocess.check_output(args,stderr=subprocess.STDOUT)
print(p2)

输出为:

b'in mainn'

第三次试验:

output, result = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell=False).communicate()
print(output)
print(result)

输出为:

b'in mainn'
b''

第四次试验:

p4 = subprocess.run(args, stdout=PIPE, stderr=PIPE)
print(p4)

输出为:

CompletedProcess(args=['python', '/path/to/file/hello.py'], returncode=0, stdout=b'in mainn', stderr=b'')

第五次审判:

p5 =subprocess.getstatusoutput(args)
print(p5)

输出为:

(0, '')

谁能帮忙?

main 函数的返回值不是传递给操作系统的返回代码。要将返回代码传递给操作系统,请使用sys.exit(),它需要一个整数。你可以给它传递一个字符串,但如果你这样做,Python 会将 1 传递给操作系统。

不能将字符串作为返回代码返回,它必须是整数。如果您想根据流程采取不同的行动。尝试将返回代码映射到主程序中的某个函数。例如

def execute_sub_program(): ... 
# somewhere else:
return_code = execute_sub_program()
if return_code == 0: 
# do something ...
elif ...

你可以尝试使用subprocess.run().returncode,如果成功执行,它给出0,如果执行失败,它给出1。


driver.py

import subprocess
args = ['python', './hello_cmd.py']
status_code = subprocess.run(args).returncode
print(["Successful execution", "Failed execution"][status_code])

对于快乐流动 (hello_cmd.py):

def main():
print("in main")
return("hello world!")
if __name__ == '__main__':
main()

对于失败的流 (hello_cmd.py):

def main():
print("in main")
raise ValueError('Failed')
if __name__ == '__main__':
main()

最新更新