繁体   English   中英

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

[英]How to get the returncode using subprocess

所以我试图执行一个文件,并使用子流程库中提供的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 main\n', None)
returncode is:
0

第二次审判:

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

输出为:

b'in main\n'

第三审判:

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

输出为:

b'in main\n'
b''

第四次审判:

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

输出为:

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

第五次审判:

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

输出为:

(0, '')

有人可以帮忙吗?

主函数的返回值不是传递给OS的返回代码。 要将返回码传递给操作系统,请使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM