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

如何将Python脚本的整数执行结果返回给调用它的Shell脚本?

Shell调用Python脚本返回整数结果的可行方案

以下三种方案均可避开set -e的终止限制,同时不会和Python脚本内的普通日志输出冲突:

方案1:独立文件描述符传递(无磁盘IO,推荐)

利用额外的文件描述符传递结果,普通日志正常输出到标准输出/标准错误,互不干扰。

b.sh 示例代码

#!/bin/bash
set -ex
# 将文件描述符3的输出捕获到result,原有标准输出重定向到标准错误,日志正常打印
result=$(python3 a.py 3>&1 >&2)
echo "获取到的Python返回结果为: $result"

a.py 示例代码

import sys
# 普通日志正常打印,会输出到终端不会被捕获
print("业务运行日志:执行中", file=sys.stderr)
# 要返回的整数结果
target_res = 1234
# 将结果写入文件描述符3,供Shell捕获
with open(3, "w") as fd:
    fd.write(f"{target_res}\n")

方案2:临时文件传递(兼容性最强)

通过临时文件中转结果,支持传递任意长度的整数甚至其他类型内容,适配所有场景。

b.sh 示例代码

#!/bin/bash
set -ex
# 生成系统安全临时文件
temp_file=$(mktemp)
# 调用Python时传入临时文件路径
python3 a.py "${temp_file}"
# 读取结果
result=$(cat "${temp_file}")
# 清理临时文件
rm -f "${temp_file}"
echo "获取到的Python返回结果为: $result"

a.py 示例代码

import sys
# 普通日志正常打印
print("业务运行日志:执行中")
# 要返回的整数结果
target_res = 5678
# 写入临时文件
temp_path = sys.argv[1]
with open(temp_path, "w") as f:
    f.write(str(target_res))

方案3:临时关闭set -e用退出码传递(逻辑最简单)

如果返回的整数范围在0~255之间,可以调用Python时临时关闭set -e,执行完后再恢复,直接用退出码传递结果。

b.sh 示例代码

#!/bin/bash
set -ex
# 临时关闭-e,避免非0退出码终止脚本
set +e
python3 a.py
result=$?
# 恢复-e
set -e
echo "获取到的Python返回结果为: $result"

a.py 示例代码

import sys
# 普通日志正常打印
print("业务运行日志:执行中")
# 要返回的整数结果,仅支持0~255
target_res = 99
sys.exit(target_res)

注意事项

  • 操作系统限制进程退出码只能是0~255的无符号整数,超出范围会发生溢出截断,比如返回256实际拿到的结果为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:03