Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的退出代码_Python_Exit Code - Fatal编程技术网

Python中的退出代码

Python中的退出代码,python,exit-code,Python,Exit Code,我收到一条消息说脚本xyz.py返回了退出代码0。这是什么意思 Python中的退出代码是什么意思?有多少人?哪些是重要的?0的退出代码通常意味着“这里没有错误”。但是,如果脚本的程序员没有遵循约定,您可能必须查阅源代码以了解其含义。通常,非零值作为错误代码返回。退出代码仅具有脚本作者指定的含义。Unix的传统是退出代码0表示“成功”,其他任何东西都是失败。确定给定脚本的退出代码的含义的唯一方法是检查脚本本身。许多编程语言中的退出代码由程序员决定。因此,您必须查看您的程序源代码(或手册)。零通常

我收到一条消息说
脚本xyz.py返回了退出代码0
。这是什么意思


Python中的退出代码是什么意思?有多少人?哪些是重要的?

0的退出代码通常意味着“这里没有错误”。但是,如果脚本的程序员没有遵循约定,您可能必须查阅源代码以了解其含义。通常,非零值作为错误代码返回。

退出代码仅具有脚本作者指定的含义。Unix的传统是退出代码0表示“成功”,其他任何东西都是失败。确定给定脚本的退出代码的含义的唯一方法是检查脚本本身。

许多编程语言中的退出代码由程序员决定。因此,您必须查看您的程序源代码(或手册)。零通常表示“一切正常”。

您正在脚本中查找对的调用。该方法的参数作为退出代码返回给环境


很可能脚本从未调用退出方法,0是默认退出代码。

来自以下文档:

可选参数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系统上),但我不知道这样做是否正确。

操作系统命令有退出代码。寻找一些关于这个的资料。shell使用退出代码来决定程序是否工作、是否有问题或是否失败。目前正在努力创建标准(或至少常用)退出代码。请参阅此帖子。

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

例如,权限被拒绝是错误代码13

import errno, sys

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

对于记录,您可以使用定义的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

如果您希望可移植地使用,请参阅PyPI上的包

安装软件包:

$pip安装exitstatus
在代码中使用:

导入系统 从出口状态导入出口状态 系统退出(退出状态成功) 答案是“取决于退出代码0的含义”

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


我喜欢POSIX:

因此,在shell中,我会键入:

python script.py && echo 'OK' || echo 'Not OK'
如果我的Python脚本调用sys.exit(0),shell将返回“OK”

如果我的Python脚本调用sys.exit(1)(或任何非零整数),shell将返回“notok”


您的工作是巧妙地使用shell,并阅读脚本的文档(或源代码)以了解退出代码的含义。

要允许执行异常处理程序和其他内容,我建议使用内置的干净关机,而不是使用突然终止进程的
sys.exit()

我建议使用内置的exit(0)进行干净的关机,而不是使用sys.exit()

我不确定这是不是一个好建议

内容如下:

site模块(在启动过程中自动导入,除非提供了-S命令行选项)向内置名称空间添加了几个常量。它们对于交互式解释器外壳非常有用,不应在程序中使用

然后:

退出(代码=无)

对象,该对象在打印时打印消息,如“使用quit()或Ctrl-D(即EOF)退出”,并在调用时使用指定的退出代码引发SystemExit


如果我们将其与文档进行比较,它使用的机制与引发
SystemExit
异常的机制相同。

以下是0-成功/正常,1-不成功/错误。您只需使用
exit(0)
exit(1)
调用,而无需导入
sys
模块。

您在哪里看到此消息?@Jeremy在PythonWin的底部。我在另一篇帖子中发现此链接:可能有用。:)h通常用于函数调用退出代码。标准化程序退出代码的尝试导致大多数POSIX系统上都出现了/usr/include/sysexits.h。很高兴知道“Unix程序通常使用2来表示命令行语法错误”@丹蒂斯顿同意。死硬的羊毛染色Gentoo倡导者,但我从来不知道。。。直到这命中注定的一天。(我的耻辱现在结束了。)相关地,请注意,
grep
打破了这一趋势,在没有行匹配时退出
1
,在实际错误时退出
2
。多谢你,史泰尔曼,一点也不确定。在Unix/Linux中,标准是:在一切正常的情况下退出0。键入命令,然后echo$?:如果读取0,则返回时不会出错。我们的想法是进行标准测试。如果代码xyz.py没有遇到任何错误,它应该返回0!如果您想更改退出代码,更愿意使用退出内置代码干净地退出,请参阅@vidstige:the
exit()
“内置”(它实际上并非始终是内置的;例如,当Python使用
-s
开关运行时,它将不存在)是错误的解决方案;你想要的是
sys.exit()
(它实际上是干净/一致地退出的),而不是
exit()
(它可以被工具替换为奇怪的东西,而
sys.exit
通常应该保持不变)