Answers:
可选参数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系统上找到的退出代码,但是我不知道这样做是否正确。
grep
通过退出退出打破这种趋势。非常感谢,斯托曼。1
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
exitstatus
PyPI软件包。
有一个errno
模块定义标准退出代码:
例如,权限被拒绝是错误代码13:
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
和errno.h),而退出状态代码为77(根据os
和sysexits.h)。发出前者的程序是非标准的(事实上是法律上的),并且与希望正确使用后者的其他程序不能很好地配合使用。
答案是“取决于零退出码的含义”
但是,在大多数情况下,这意味着“一切都很好”
我喜欢POSIX:
因此,在外壳上,我将输入:
python script.py && echo 'OK' || echo 'Not OK'
如果我的python脚本调用,sys.exit(0)
则外壳返回“ OK”
如果我的python脚本调用sys.exit(1)
(或任何非零整数),则外壳程序返回“不正确”
了解外壳程序是您的工作,并阅读脚本的文档(或源代码)以了解退出代码的含义。
操作系统命令具有退出代码。查找linux退出代码,以了解有关此内容的一些信息。外壳程序使用退出代码来确定程序是否正常运行,出现问题或失败。已经做了一些努力来创建标准(或至少是常用的)退出代码。请参阅此高级Shell脚本发布。
我建议使用内置的exit(0)进行干净关机,而不要使用sys.exit()
我不确定这是否是个好建议。
站点模块(在启动期间会自动导入,除非指定了-S命令行选项)会向内置名称空间添加多个常量。它们对于交互式解释器外壳很有用,不应在程序中使用。
然后:
退出(代码=无)
对象,在打印时会打印一条消息,例如“使用quit()或Ctrl-D(即EOF)退出”,并在调用时使用指定的退出代码引发SystemExit。
如果将它与sys.exit()文档进行比较,则它使用的是引发SystemExit
异常的相同机制。
如果你想移植应用的标准POSIX退出代码,请参阅exitstatus
PyPI上的包。
安装软件包:
$ pip install exitstatus
在您的代码中使用:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
为了允许执行异常处理程序和其他操作,我建议使用 exit(0)
内置而不要使用sys.exit()
它来突然终止进程。
SystemExit
似乎以任何一种方式提高。
os._exit
,两者似乎都提高了SystemExit
。
sys.exit()
不关机干净,就像exit()
。他们俩都做同样的事情:提出一个SystemExit
例外。实际上,exit()
它是用于交互式会话的,而不是脚本的,因此从概念上讲sys.exit()
是所指示的。您可能会与混淆os._exit()
,那是突然终止的那一个。