我收到一条消息script xyz.py returned exit code 0
。这是什么意思?
Python中的退出代码是什么意思?那里有多少?哪些是重要的?
答案 0 :(得分:185)
您在脚本中寻找的是对sys.exit()
的调用。该方法的参数作为退出代码返回到环境中。
脚本很可能永远不会调用exit方法,而0是默认的退出代码。
答案 1 :(得分:85)
来自the documentation for sys.exit
:
可选参数arg可以是 给出退出状态的整数 (默认为零)或其他类型 对象。如果是整数,则为零 被视为“成功终止” 并考虑任何非零值 贝壳和贝壳的“异常终止” 类似。大多数系统都需要它 在0-127范围内,并生产 否定未定义的结果。一些 系统有一个约定 指定具体含义 具体的退出代码,但这些是 一般不发达; Unix的 程序通常使用2作为命令 行语法错误和1为所有其他错误 一种错误。
使用退出代码的一个示例是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系统上)找到的退出代码,但我不知道这是否正确。
答案 2 :(得分:24)
有一个errno
模块定义标准退出代码:
例如,权限被拒绝是错误代码 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
答案 3 :(得分:21)
对于记录,您可以使用定义here的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
答案 4 :(得分:14)
0的退出代码通常意味着“这里没有错”。但是,如果脚本的程序员不遵循惯例,您可能需要咨询源代码以了解其含义。通常会将非零值作为错误代码返回。
答案 5 :(得分:5)
操作系统命令具有退出代码。请查看linux exit codes以查看相关内容。 shell使用退出代码来确定程序是否有效,出现问题或失败。有一些努力来创建标准(或至少常用的)退出代码。请参阅此Advanced Shell Script发布。
答案 6 :(得分:5)
如果您想要移植standard POSIX exit codes,请参阅PyPI上的exitstatus包。
安装包:
pip install exitstatus
在您的代码中使用:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
答案 7 :(得分:4)
退出代码仅具有脚本作者指定的含义。 Unix的传统是退出代码0意味着“成功”,其他任何东西都是失败的。确定给定脚本的退出代码的唯一方法是检查脚本本身。
答案 8 :(得分:4)
答案是"取决于退出代码零意味着"
但是,在大多数情况下,这意味着"一切都很好"
我喜欢POSIX:
所以,在shell上,我会输入:
python script.py && echo 'OK' || echo 'Not OK'
如果我的python脚本调用sys.exit(0)
,则shell返回' OK'
如果我的python脚本调用sys.exit(1)
(或任何非零整数),则shell返回' Not OK'
您的工作是聪明地使用shell,并阅读脚本的文档(或源代码)以查看退出代码的含义。
答案 9 :(得分:3)
我建议使用内置的exit(0)而不是使用sys.exit()
进行干净关闭
我不确定这是不是一个好建议。
The very documentation mentioned读到:
站点模块(在启动期间自动导入,除非给出-S命令行选项),会向内置命名空间添加几个常量。它们对交互式解释器shell很有用,不应该在程序中使用。
然后:
出口(代码=无)
打印时打印消息,如“使用退出()或Ctrl-D(即EOF)退出”,并在调用时,使用指定的退出代码提升SystemExit。
如果我们将其与sys.exit()文档进行比较,则会使用引发SystemExit
例外的相同机制。
答案 10 :(得分:2)
许多编程语言中的退出代码取决于程序员。所以你必须查看你的程序源代码(或手册)。零通常意味着“一切都很顺利”。
答案 11 :(得分:1)
跟随unix exit codes 0 -成功/确定, 1 -不成功/错误。您可以简单地使用exit(0)
或exit(1)
调用而无需导入sys
模块。
答案 12 :(得分:0)
为了允许异常处理程序和其他东西执行,我建议使用exit(0)
内置函数进行干净关闭,而不是使用 $response = $dynamodb->putItem([
....
....
'Fruits' => ['SS' => $fruits]
突然终止进程。