在Python中退出代码

我收到一条消息,说script xyz.py returned exit code 0 。 这是什么意思?

Python中的退出代码是什么意思? 那里有多less? 哪些重要?

你正在寻找的脚本是调用sys.exit() 。 该方法的参数作为退出代码返回到环境。

脚本从来不会调用exit方法,0是默认的退出代码。

sys.exit的文档 :

可选参数arg可以是一个给出退出状态(默认为零)的整数或其他types的对象。 如果它是一个整数,零被认为是“成功终止”,任何非零值被shell等认为是“exception终止”。 大多数系统要求它在0-127范围内,否则会产生未定义的结果。 一些系统有一个为特定退出代码指定特定含义的惯例,但是这些系统通常是欠发达的; Unix程序通常使用2作为命令行语法错误,1使用其他types的错误。

使用退出代码的一个例子是在shell脚本中。 在bash中你可以检查特殊variables$? 对于最后退出状态:

 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系统上)find的退出码,但是我不知道这是否正确。

有一个errno模块定义了标准的退出代码:

例如, Permission denied是错误代码13

 import errno, sys if can_access_resource(): do_something() else: sys.exit(errno.EACCES) 

为了logging,您可以使用此处定义的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 

0的退出码通常意味着“这里没有错”。 但是,如果脚本的程序员不遵守约定,则可能需要咨询源代码以了解其含义。 通常,非零值作为错误代码返回。

操作系统命令具有退出代码。 查找linux退出代码来查看一些资料。 shell使用退出代码来决定程序是否工作,出现问题或失败。 有一些努力来创build标准(或至less是常用的)退出代码。 请参阅此高级Shell脚本发布。

退出代码只具有由脚本作者分配的含义。 Unix的传统是退出代码0意味着“成功”,其他任何事情都是失败的。 确定给定脚本的退出代码的唯一方法是检查脚本本身。

许多编程语言的退出代码取决于程序员。 所以你必须看看你的程序源代码(或手册)。 零通常意味着“一切顺利”。

如果你想移植使用标准的POSIX退出代码 ,请参阅PyPI上的exitstatus软件包。

安装软件包:

 pip install exitstatus 

在你的代码中使用:

 import sys from exitstatus import ExitStatus sys.exit(ExitStatus.success) 

答案是“取决于零代表什么退出码”

然而,在大多数情况下,这意味着“一切都好”


我喜欢POSIX:

所以,在shell中,我会input:

python script.py && echo 'OK' || echo 'Not OK'

如果我的python脚本调用sys.exit(0) ,shell会返回“OK”

如果我的python脚本调用了sys.exit(1) (或者任何非零整数),那么shell会返回“Not OK”

这是你的工作,要聪明的shell,并阅读您的脚本文件(或来源),看看什么是退出代码的意思。

为了允许exception处理程序和其他的东西执行,我推荐使用exit(0)内buildsys.exit()而不是使用sys.exit()来突然终止进程。