问题描述
我有一个 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