【问题标题】:Running a Python script within shell script - Check status在 shell 脚本中运行 Python 脚本 - 检查状态
【发布时间】:2013-01-05 01:26:33
【问题描述】:

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

python script.py

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

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

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

【问题讨论】:

标签: python bash shell scripting exit-code


【解决方案1】:

首先,您可以将所需的退出代码作为参数传递给 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

【讨论】:

  • 我需要在你的代码前加上一行 python script.py 来运行它吗?
  • if 语句中给出的命令列表被执行,其退出代码决定了接下来执行if 的哪个分支。
  • 我不明白这是如何工作的。对我来说,这就是说“如果脚本那么”这样做。不应该是“如果脚本退出代码 = 0 那么”
  • if 语句在 shell 脚本中的工作方式与在其他语言中略有不同,因为它们专注于运行其他程序。我将更新答案以给出一个明确检查退出代码以进行对比的示例。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2018-07-01
    • 2018-08-05
    • 2019-02-11
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多