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

如何从Bash脚本中获取Python脚本的函数返回值?

获取Python脚本返回值到Bash的几种方法

你遇到的问题很典型:Python函数的return值不会自动被Bash捕获——那只是Python内部函数的返回值,和脚本进程的输出/退出码没有直接关系。下面给你几种可行的实现方案,按需选择:

方案1:分离日志与结果输出(推荐)

把普通日志打到标准错误流(stderr),把需要返回的结果打到标准输出流(stdout),这样Bash可以单独捕获stdout作为结果,stderr的日志会正常输出到终端(或者可以重定向到文件)。

修改foo.py:

import sys

def main():
    # 日志输出到stderr,不会被Bash的$(...)捕获
    print("exec main..", file=sys.stderr)
    return "execution ok"

if __name__ == '__main__':
    result = main()
    # 结果输出到stdout,会被Bash捕获
    print(result)

对应的start.sh:

# 仅捕获stdout到script_output,stderr日志会直接显示在终端
script_output=$(python foo.py)
echo "捕获到的返回值:$script_output"

# 如果需要把stderr日志保存到文件,可以这样写
# script_output=$(python foo.py 2>foo.log)

方案2:用特殊标记过滤结果

如果不想修改日志的输出流,可以给返回值加一个唯一的标记,然后在Bash中过滤提取。

修改foo.py:

def main():
    print("exec main..")
    return "execution ok"

if __name__ == '__main__':
    result = main()
    # 用唯一标记包裹结果,方便后续过滤
    print(f"===PYTHON_RESULT==={result}")

对应的start.sh:

# 捕获所有输出
full_output=$(python foo.py 2>&1)
# 提取标记后的结果
script_output=$(echo "$full_output" | grep -o "===PYTHON_RESULT===".* | sed 's/===PYTHON_RESULT===//')
# 打印原始日志(去掉结果行)
echo "原始日志:"
echo "$full_output" | grep -v "===PYTHON_RESULT==="
# 打印提取到的返回值
echo "捕获到的返回值:$script_output"

方案3:用临时文件传递结果

让Python把返回值写入一个临时文件,Bash从文件中读取内容。

修改foo.py:

def main():
    print("exec main..")
    return "execution ok"

if __name__ == '__main__':
    result = main()
    # 写入临时文件
    with open("/tmp/python_script_result.tmp", "w") as f:
        f.write(result)

对应的start.sh:

# 执行Python脚本,打印所有输出
python foo.py 2>&1
# 从临时文件读取结果
script_output=$(cat /tmp/python_script_result.tmp)
echo "捕获到的返回值:$script_output"
# 用完删除临时文件
rm /tmp/python_script_result.tmp

方案4:用退出码传递整数结果

如果你的返回值是整数(比如表示成功/失败的状态码),可以用sys.exit()把函数返回值设置为进程的退出码,Bash用$?获取。

修改foo.py:

import sys

def main():
    print("exec main..")
    return 0  # 0表示成功,非0表示错误

if __name__ == '__main__':
    exit_code = main()
    sys.exit(exit_code)

对应的start.sh:

python foo.py 2>&1
# 获取退出码
script_exit_code=$?
echo "Python脚本的退出码:$script_exit_code"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:52