我收到一条消息,说脚本xyz.py返回退出代码0。这是什么意思?
Python中的退出码是什么意思?有多少个?哪些是重要的?
我收到一条消息,说脚本xyz.py返回退出代码0。这是什么意思?
Python中的退出码是什么意思?有多少个?哪些是重要的?
当前回答
为了允许异常处理程序和其他事情执行,我建议使用内置的exit(0)干净地关闭,而不是使用sys.exit()突然终止进程。
其他回答
退出代码0通常表示“这里没有问题”。但是,如果脚本的程序员没有遵循约定,您可能需要参考源代码来了解它的含义。通常非零值作为错误代码返回。
为了记录,您可以使用这里定义的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
如果您希望可移植地使用标准POSIX退出码,请参阅PyPI上的exitstatus包。
安装包:
$ pip install exitstatus
在你的代码中使用:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
来自sys.exit的文档:
The optional argument arg can be an integer giving the exit status (defaulting to zero), or another type of object. If it is an integer, zero is considered “successful termination” and any nonzero value is considered “abnormal termination” by shells and the like. Most systems require it to be in the range 0-127, and produce undefined results otherwise. Some systems have a convention for assigning specific meanings to specific exit codes, but these are generally underdeveloped; Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors.
一个使用退出码的例子是在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系统上)中找到的退出码,但我不知道这样做是否正确。
退出码只有脚本作者指定的意义。Unix的传统是,退出码0表示“成功”,否则就是失败。要确定给定脚本的退出码意味着什么,唯一的方法是检查脚本本身。