问题:Python中的退出代码
我收到一条消息说script xyz.py returned exit code 0
。这是什么意思?
Python中的退出代码是什么意思?那里有多少?哪些重要?
回答 0
您在脚本中寻找的是对的调用sys.exit()
。该方法的参数作为退出代码返回到环境。
该脚本很可能从未调用过exit方法,并且0是默认的退出代码。
回答 1
可选参数arg可以是给出退出状态的整数(默认为零),也可以是其他类型的对象。如果它是整数,则shell等将零视为“成功终止”,而将任何非零值视为“异常终止”。大多数系统要求它的范围是0-127,否则会产生不确定的结果。某些系统具有为特定的退出代码分配特定含义的约定,但是这些通常不完善。Unix程序通常将2用于命令行语法错误,将1用于所有其他类型的错误。
在外壳程序脚本中使用退出代码的一个示例。在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系统上找到的退出代码,但是我不知道这样做是否正确。
回答 2
作为记录,您可以使用此处定义的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
回答 3
有一个errno
模块定义标准退出代码:
例如,权限被拒绝是错误代码13:
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
回答 4
退出代码0通常表示“这里没有问题”。但是,如果脚本的程序员未遵循约定,则可能必须查阅源代码以了解其含义。通常,将非零值作为错误代码返回。
回答 5
答案是“取决于零退出码的含义”
但是,在大多数情况下,这意味着“一切都很好”
我喜欢POSIX:
因此,在外壳上,我将输入:
python script.py && echo 'OK' || echo 'Not OK'
如果我的python脚本调用,sys.exit(0)
则外壳返回“ OK”
如果我的python脚本调用sys.exit(1)
(或任何非零整数),则外壳程序返回“不正确”
了解外壳程序是您的工作,并阅读脚本的文档(或源代码)以了解退出代码的含义。
回答 6
操作系统命令具有退出代码。查找linux退出代码,以了解有关此内容的一些信息。外壳程序使用退出代码来确定程序是否正常运行,出现问题或失败。已经做了一些努力来创建标准(或至少是常用的)退出代码。请参阅此高级Shell脚本发布。
回答 7
我建议使用内置的exit(0)进行干净关机,而不要使用sys.exit()
我不确定这是否是个好建议。
站点模块(在启动期间会自动导入,除非指定了-S命令行选项)会向内置命名空间添加多个常量。它们对于交互式解释器外壳很有用,不应在程序中使用。
然后:
退出(代码=无)
对象,在打印时会打印一条消息,例如“使用quit()或Ctrl-D(即EOF)退出”,并在调用时使用指定的退出代码引发SystemExit。
如果将它与sys.exit()文档进行比较,则它使用的是引发SystemExit
异常的相同机制。
回答 8
如果你想移植应用的标准POSIX退出代码,请参阅exitstatus
PyPI上的包。
安装软件包:
$ pip install exitstatus
在您的代码中使用:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
回答 9
退出代码仅具有脚本作者指定的含义。Unix的传统是退出代码0表示“成功”,其他都是失败的。确保给定脚本的退出代码意味着什么的唯一方法是检查脚本本身。
回答 10
许多编程语言中的退出代码取决于程序员。因此,您必须查看程序源代码(或手册)。零通常表示“一切正常”。