获取 python 退出状态并在 bash 命令中使用它

问题描述

我有一个 Python 脚本,它在完成时返回一个状态(但不是通过输出)。

sys.exit(status)

而且我必须运行使用该状态的 bash 命令,执行类似于:

command --host=xxx --service="xxx" --message="`myscript.py`" -s "ip" -u "user" -p "pass" " --returncode=0

有没有办法直接从“sys.exit(status)”中取出返回码?

我尝试将 --returncode=0 更改为 --returncode=$? 但它不起作用。

解决方法

脚本退出后,bash 在变量 $? 中有退出代码。但是调用另一个命令会改变退出代码。所以你应该在脚本返回后立即将它保存到一个变量中。

你可以这样写:

python3 script.py
status=$?
command --returncode=$status
,

好吧,如果您想确保它返回您想要的状态,您可以使用 templating 或硬编码状态,但这基本上消除了具有退出代码/状态的用例。 (ref)

除此之外,POSIX shell 可以在 $? 变量中使用退出代码,但您也可以返回您想要的输出并进行检查,例如在 STDOUT 中返回公共输出并返回错误,或者对于您的情况,在 STDERR like this 中返回自定义“退出代码”字符串。

,

您可以尝试以下操作:

sys_exit_code.py

import sys
status = 12
sys.exit(status)

sys_exit_code.sh

python sys_exit_code.py
RC=$?
echo "Exit code $RC"

运行你的 bash 脚本

sh sys_exit_code.sh