13

在我的 shell 脚本中,我运行以下命令:

python script.py

我想知道,作为一个两部分的问题:

  1. 如何根据 python 脚本中发生的情况对我的 python 脚本进行编程以将状态传递回运行它的 shell 脚本。例如,如果 python 脚本出现问题,则让它退出并返回代码 1,然后将其发送回 shell。

  2. 如何让我的 shell 脚本读取 python 的退出代码并退出错误?例如,除了 0 之外的任何状态码都会退出。

4

2 回答 2

28

首先,您可以将所需的退出代码作为参数传递给sys.exit您的 python 脚本。

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
于 2013-01-21T22:02:42.750 回答
2

讨厌复活恐龙,但是虽然这个选定的答案按书面形式工作,但我想添加一个变体,可以检查多个退出代码。$?似乎只检索一次最后执行的程序的退出代码。因此,如果您需要针对多种情况检查退出代码,则有必要分配$?给一个变量,然后检查该变量,a la(使用@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
于 2020-09-29T15:48:44.650 回答