因此,我试图执行一个文件,并使用子流程库中提供的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, '')
有人可以帮忙吗?
答案 0 :(得分:2)
主函数的返回值不是传递给OS的返回码。要将返回代码传递给操作系统,请使用sys.exit()
,它需要一个整数。您可以 传递一个字符串,但是如果这样做,Python会将1传递给操作系统。
答案 1 :(得分:0)
您不能将字符串作为返回码返回,它必须是整数。如果要根据过程采取不同的行动。尝试将返回代码映射到主程序中的某些函数。例如
def execute_sub_program(): ...
# somewhere else:
return_code = execute_sub_program()
if return_code == 0:
# do something ...
elif ...
答案 2 :(得分:0)
您可以尝试使用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()