Linux 基础教程

Linux 参考手册

Linux 笔记

shell 脚本如何获取 python 命令返回的结果

Linux Shell 脚本编程详解 Linux Shell 脚本编程详解


当我们写 shell 脚本将一些离散的逻辑模块串行组合在一起的时候,需要获取业务模块处理(脚本运行,可能是 python 或 java 等)的结果,再根据其返回判断下一步如何处理。shell 针对这种需求,提供了一个变量 $?,该变量就是用来存放上一个命令/程序执行完的结果。

解决方法

正常情况下,python 或 java 等程序正常执行完后,会返回 0,其它错误会返回非 0 数,对于 python 返回的数值范围为 [0, 255]

我们先创建简单的 python 脚本 demo.py,代码如下:

import sys

print('check python return value')

shell 脚本如下:

#! /bash/sh

python3 -u demo.py

if [ $? -eq 0 ];then
    echo '上一个命令执行成功'
else
    echo $?
    echo '上一个命令执行失败!'
fi

执行完后,打印如下:

check python return value
上一个命令执行成功

如果将 python 脚本构造成返回非 0(直接返回指定 code 或报错),demo.py 代码修改如下:

import sys

print('check python return value')
a = 0
c = 5 / a

重新执行 demo.sh 脚本,输入如下:

check python return value
Traceback (most recent call last):
  File "demo.py", line 5, in <module>
    c = 5 / a
ZeroDivisionError: division by zero
1
上一个命令执行失败

可以看出 python 程序出错默认会返回 1,也可以通过 sys.exit() 指定返回值,但是需要注意的是如果返回值越界(超出 0-255 范围),它就会在阈值范围内轮回,示例如下:

import sys

print('check python return value')
sys.exit(256)

执行脚本后,输出返回码 0,如下:

check python return value
上一个命令执行成功