You need to enable JavaScript to run this app. Python 3调用bash脚本时如何将输出存入变量?当前返回值为0的问题
优惠活动
大模型
产品
解决方案
定价
更多

Python 3调用bash脚本时如何将输出存入变量?当前返回值为0的问题

问题核心

你当前调用的subprocess.call方法,返回值是被执行命令的退出状态码,而非命令的标准输出内容。
你在终端最先看到的那段JSON输出,是bash脚本的标准输出默认直接继承Python进程的输出流,无捕获直接打印到屏幕的结果;方法返回的0,仅代表bash脚本执行成功无报错,这就是为什么变量拿到的始终是0。调整完成后,脚本的输出不会再直接打印到终端,而是全部存入你定义的变量中,按你的代码逻辑输出。

代码调整方法

要把bash脚本的标准输出存入Python变量,需要更换为支持输出捕获的subprocess调用方式,推荐两种实现:

  1. 通用兼容写法(适配所有Python3版本)
    用subprocess.check_output直接捕获命令输出:
    #!/usr/bin/env python3
    import subprocess
    
    
    def api_call():
        # 执行脚本,text=True直接返回字符串格式的输出,避免字节转义问题
        script_output = subprocess.check_output(
            "/home/gposcl1/PyNetBox/api_GET.sh",
            shell=True,
            text=True
        )
        # 去掉输出末尾多余的换行符,避免后续字符串处理出问题
        return script_output.strip()
    
    
    api_call_result = api_call()
    # 保留原有代码的空行打印间隔逻辑
    print("\n\n")
    print(api_call_result)
    
  2. Python3.7及以上版本推荐写法
    用官方推荐的subprocess.run方法,可同时捕获标准输出、错误输出,方便排查问题:
    #!/usr/bin/env python3
    import subprocess
    
    
    def api_call():
        exec_result = subprocess.run(
            "/home/gposcl1/PyNetBox/api_GET.sh",
            shell=True,
            capture_output=True,
            text=True
        )
        # 主动判断脚本执行状态,失败时抛出可读的错误信息
        if exec_result.returncode != 0:
            raise RuntimeError(f"API调用脚本执行失败,错误信息:{exec_result.stderr}")
        return exec_result.stdout.strip()
    
    
    api_call_result = api_call()
    print("\n\n")
    print(api_call_result)
    

注意:这里必须加shell=True参数,否则subprocess会把完整的脚本路径字符串当成可执行文件名,无法正确解析执行bash脚本。


内容的提问来源于stack exchange,提问作者Sean Liles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 13:06:03