如何将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
相关产品推荐
相关产品推荐

