Linux 基础教程

Linux 参考手册

Linux 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/linux-shell-get-python-program-result.html

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
上一个命令执行成功

 

在Java中执行Shell脚本有多种方式,下面将介绍三种常用的方法,并提供相应的步骤流程和示例代码。###方法三:使用第三方库ApacheC ...
Linux Shell 提供了用户与内核进行交互操作的一种接口,它其实是一个命令解释器,解释由用户输入的命令并且把它们送到内核。不仅如此,S ...
Redis 脚本使用 Lua 解释器来执行脚本。Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 ...
linux shell 脚本判断文件是否存在,主要是利用 test 表达式的,具体参考如下。 ...
Linux 或 Mac OS 可以利用 date 命令在 shell 或 bash 下获取昨天日期,主要利用 -d 选项结合日期增减文案描述 ...