You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:07