在脚本中运行Python脚本 - 检查状态

14 投票
2 回答
20502 浏览
提问于 2025-04-17 13:19

在我的shell脚本中,我运行了这个命令:

python script.py

我想问两个问题:

  1. 我该如何编写我的Python脚本,让它根据发生的事情把状态返回给运行它的shell脚本?比如说,如果Python脚本出错了,它应该以代码1退出,然后这个代码会被发送回shell。

  2. 我该如何让我的shell脚本读取Python的退出代码,并在出错时退出?比如说,如果状态码不是0,就退出。

2 个回答

2

虽然这个老问题已经被提起,但我想补充一个变体,方便大家检查多个退出代码。$? 这个命令只会获取最后执行的程序的退出代码一次。如果你需要检查多个情况的退出代码,就得把 $? 的值先存到一个变量里,然后再去检查这个变量。就像 @chepner 的例子那样:

python script.py
exit_code=$?
if [[ $exit_code = 0 ]]; then
    echo "success"
elif [[ $exit_code = 1 ]]; then
    echo "a different form of success, maybe"
else
    echo "failure: $exit_code"
fi
29

首先,你可以在你的Python脚本中通过给sys.exit传递一个参数来设置你想要的退出代码。

其次,最近退出的进程的退出代码可以在bash的参数$?中找到。不过,你可能不需要专门去检查它:

if python script.py; then
    echo "Exit code of 0, success"
else
    echo "Exit code of $?, failure"
fi

如果你想明确检查退出代码,你需要在if语句中提供一个条件表达式:

python script.py
if [[ $? = 0 ]]; then
    echo "success"
else
    echo "failure: $?"
fi

撰写回答