Python中的退出码标准
在Python中(特别是Python的命令行工具),有没有什么固定的退出代码标准或者保留的退出代码呢?比如在UNIX平台上,C语言有一个叫做/usr/include/sysexits.h的文件,或者你可以查看这个链接http://tldp.org/LDP/abs/html/exitcodes.html,它是关于Bash脚本的退出代码的。
3 个回答
1
os
模块提供了一些可以使用的退出代码常量。
sys.exit(os.EX_OK)
sys.exit(os.EX_USAGE)
关于可移植性
虽然退出代码很有用,但它们可能会带来可移植性的问题。文档中提醒:
注意:这些代码在所有Unix平台上可能并不都可用,因为不同平台之间会有一些差异。这些常量的定义取决于底层平台。
所以,如果你想使用退出代码,并且你的代码需要在不同环境中都能运行,你就得多做一些错误检查。sys.exit()
的文档建议在失败时使用字符串错误信息或者整数1。
import os
import sys
try:
subcommand = sys.argv[1]
except IndexError:
try:
sys.exit(os.EX_USAGE)
except AttributeError:
sys.exit("missing argument: subcommand")
对于成功退出:
import os
import sys
subcommand = sys.argv[1]
if subcommand == 'noop':
try:
sys.exit(os.EX_OK)
except:
sys.exit()
print(subcommand)
考虑到退出代码带来的额外复杂性,如果你并不真的需要它们,可能可以选择不使用。
2
可以查看关于 sys.exit()
的文档。
这个可选的参数 arg 可以是一个整数,用来表示退出状态(默认是零),也可以是其他类型的对象。如果是整数,零表示“正常结束”,而任何非零的值则被认为是“异常结束”,这在命令行等环境中都是这样理解的。大多数系统要求这个值在 0 到 127 之间,超出这个范围可能会产生不确定的结果。有些系统会为特定的退出代码赋予特定的含义,但这些通常没有统一标准;例如,Unix 系统通常用 2 来表示命令行语法错误,用 1 来表示其他类型的错误。
18
如果你在一个POSIX平台上,你可以通过os
模块来访问sysexit.h
中的常量:
>>> import os
>>> os.EX_ <tab pressed>
os.EX_CANTCREAT os.EX_NOHOST os.EX_OK os.EX_SOFTWARE
os.EX_CONFIG os.EX_NOINPUT os.EX_OSERR os.EX_TEMPFAIL
os.EX_DATAERR os.EX_NOPERM os.EX_OSFILE os.EX_UNAVAILABLE
os.EX_IOERR os.EX_NOUSER os.EX_PROTOCOL os.EX_USAGE