题
我收到一条消息,说 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的退出代码通常意味着“这里没有任何错误。”但是,如果脚本的程序员不遵循惯例,您可能需要咨询源代码以了解它的含义。通常会将非零值作为错误代码返回。
如果您想要移植使用标准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
异常。
许多编程语言中的退出代码取决于程序员。所以你必须查看你的程序源代码(或手册)。零通常意味着“一切都很顺利”。
为了允许异常处理程序和其他东西执行,我建议使用进行干净关闭 exit(0)
内置而不是使用 sys.exit()
,它会突然终止进程。