我收到一条消息,说 script xyz.py返回退出代码0 。这是什么意思?

Python中的退出代码是什么意思?那里有多少?哪些是重要的?

有帮助吗?

解决方案

您在脚本中寻找的是对 sys.exit() 。该方法的参数作为退出代码返回到环境中。

脚本很可能永远不会调用exit方法,而0是默认的退出代码。

其他提示

sys.exit 的文档

  

可选参数arg可以是   给出退出状态的整数   (默认为零)或其他类型   对象。如果是整数,则为零   被视为“成功终止”   并考虑任何非零值   “异常终止”贝壳和贝壳   类似。大多数系统都需要它   在0-127范围内,并生产   否定未定义的结果。一些   系统有一个约定   指定具体含义   具体的退出代码,但这些是   一般不发达; Unix的   程序通常使用2作为命令   行语法错误和1为所有其他错误   一种错误。

使用退出代码的一个示例是shell脚本。在bash中,您可以检查特殊变量 $?的最后退出状态:

me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43

我个人尝试使用 /usr/include/asm-generic/errno.h (在Linux系统上)中找到的退出代码,但我不知道这是否是正确的事情。

有一个 errno 模块,用于定义标准退出代码:

例如,权限被拒绝是错误代码 13

import errno, sys

if can_access_resource():
    do_something()
else:
    sys.exit(errno.EACCES)

对于记录,您可以使用此处定义的POSIX标准退出代码。

示例:

import sys, os

try:
    config()
except:
    sys.exit(os.EX_CONFIG) 
try:
    do_stuff()
except:
    sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok

0的退出代码通常意味着“这里没有任何错误。”但是,如果脚本的程序员不遵循惯例,您可能需要咨询源代码以了解它的含义。通常会将非零值作为错误代码返回。

操作系统命令具有退出代码。查找 linux退出代码以查看相关内容。 shell使用退出代码来确定程序是否有效,出现问题或失败。有一些努力来创建标准(或至少常用的)退出代码。请参阅此高级Shell脚本帖子。

如果您想要移植使用标准POSIX退出代码,请参阅PyPI上的 exitstatus 包。

安装包:

pip install exitstatus

在您的代码中使用:

import sys
from exitstatus import ExitStatus

sys.exit(ExitStatus.success)

退出代码仅具有脚本作者指定的含义。 Unix的传统是退出代码0意味着“成功”,其他任何东西都是失败的。确定给定脚本的退出代码的唯一方法是检查脚本本身。

答案是“取决于退出代码零意味着什么”

但是,在大多数情况下,这意味着“一切都好”


我喜欢POSIX:

所以,在shell上,我会输入:

python script.py&& echo'OK'|| echo'不行'

如果我的python脚本调用 sys.exit(0),则shell返回'OK'

如果我的python脚本调用 sys.exit(1)(或任何非零整数),shell返回'Not OK'

您的工作是聪明地使用shell,并阅读脚本的文档(或源代码)以查看退出代码的含义。

  

我建议使用内置的exit(0)而不是使用sys.exit()

进行干净关闭

我不确定这是不是一个好建议。

提到的文件读:

  

站点模块(在启动期间自动导入,除非给出-S命令行选项),会向内置命名空间添加几个常量。它们对交互式解释器shell很有用,不应该在程序中使用

然后:

  

出口(代码=无)

     

打印时打印消息,如“使用退出()或Ctrl-D(即EOF)退出”,并在调用时,使用指定的退出代码提升SystemExit。

如果我们将它与 sys.exit()文档,它使用相同的机制来引发 SystemExit 异常。

许多编程语言中的退出代码取决于程序员。所以你必须查看你的程序源代码(或手册)。零通常意味着“一切都很顺利”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top