使用subprocess.call调用Python脚本返回值不符预期的原因咨询
为什么调用Python脚本后输出最后是0而非预期的123?
让我们一步步拆解你的问题:
问题的核心原因
你的sp_test.py脚本并没有输出函数的返回值。虽然sp_test()函数返回了str(a)+str(b)+str(c),但在脚本的主执行块里,你只是调用了这个函数,却没有把返回结果打印出来。也就是说,当sp_test.py运行时,只会打印传入的1、2、3,而函数返回的123根本没有被输出到控制台。
那末尾的0是哪里来的?
你看到的0是subprocess.call()的返回值,它代表被调用的进程(也就是sp_test.py)成功执行完毕,没有发生错误——这是操作系统进程退出码的标准约定,0表示成功,非0表示异常。如果你在调用脚本里是这样写的:
print(subprocess.call([sys.executable, 'sp_test.py', '1','2','3']))
那这个0就是print()输出的subprocess.call()的返回结果。
这属于预期行为吗?
完全属于预期行为:
- Python不会自动打印函数的返回值,必须显式调用
print()才能输出到标准输出; subprocess.call()的设计就是返回子进程的退出状态码,而非子进程的输出内容——如果你想获取子进程的输出,应该用subprocess.check_output()或subprocess.run()配合capture_output=True参数。
如何得到你预期的输出?
修改sp_test.py的主执行块,把函数返回值打印出来:
if __name__ == "__main__": result = sp_test(sys.argv[1],sys.argv[2],sys.argv[3]) print(result)
这样当你通过subprocess调用时,sp_test.py会依次输出1、2、3,然后输出123,和你的预期一致。
内容的提问来源于stack exchange,提问作者user3062260
相关产品推荐
相关产品推荐

