Python中的退出代码
我收到了一条消息,上面写着 script xyz.py returned exit code 0
。这是什么意思呢?
在Python中,退出代码(exit code)代表程序运行结束时的状态。简单来说,退出代码就是程序告诉你它运行得怎么样。通常情况下,退出代码有很多种,但最常见的就是0和1。退出代码0表示程序顺利完成,没有遇到任何问题;而其他的退出代码,比如1,通常表示程序出错了。
所以,退出代码的数量并不是固定的,具体有多少取决于程序的设计。不过,最重要的就是0和1,0表示一切正常,1则表示出现了问题。
17 个回答
55
为了说明,你可以使用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
141
根据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系统上)找到的退出代码,但我不知道这样做是否正确。
328
你需要在脚本中找找有没有调用过 sys.exit()
的地方(exit()
其实是调用了 sys.exit()
)。这个方法的参数会作为退出代码返回给环境。
很有可能这个脚本根本没有调用过 exit 方法,所以默认的退出代码就是 0。