Python退出码

21

在Unix系统下,我在哪里可以找到关于"python"进程退出代码含义的信息?例如,如果我运行"python thisfiledoesntexist.py"命令,我会得到退出码2。

from errno import errorcode
print errorcode[2]
4个回答

10
如上所述,大多数错误代码来自于执行的脚本和sys.exit()
以不存在的文件作为解释器参数的示例属于不同的类别。虽然没有明确说明,但我猜测这些退出代码是“标准”Linux错误代码。有一个名为errno的模块提供了这些错误号码(退出代码来自于linux/include/errno.h)。
例如:errno.ENOENT(代表“没有此文件或目录”)的编号为2,与您的示例相符。

我有几个 errno.h 文件,但没有一个路径以 "linux/include/errno.h" 结尾。我从 "/usr/include/linux/errno.h" 开始,因为它最相似,然后按照 C 的 include 语句找到了 "/usr/include/asm-generic/errno-base.h",最后找到了错误代码 2("No such file or directory"),尽管在此之前的那个文件("usr/include/asm-generic/errno.h")有更高的错误编号。 - undefined

8
Python手册对于其退出码的说明如下:
一些系统约定将特定的退出码赋予特定的含义,但这些通常是欠发展的。Unix程序通常使用2来表示命令行语法错误,使用1来表示其他所有类型的错误。
因此,由于您指定了一个命令行参数 thisfiledoesntexist.py,如果文件实际上不存在,您将获得一个返回代码为2(在这种情况下,我建议将其重命名为thisfiledoesexist.py;)
除了这种解析错误之外,返回代码由运行的Python程序确定。除非您使用sys.exit指定另一个退出码,否则返回0。Python本身不会干扰。

3
也许可以使用来自 os 模块 的退出代码常量。此外,请查看 sys.exit 文档。

0

不幸的是,Python的退出代码并不能百分之百地保证与文档所声称的一致:os._exit允许Python程序员定义应该使用哪个退出代码,这意味着python file_exists_but_claims_that_it_does_not.py可能会以os.EX_DATAERR退出。


在我的Ubuntu系统上,它似乎从errno返回代码,不确定os代码是用来做什么的,但是将相同的数字值分配给不同的含义,与errno模块不同。 - Yaroslav Bulatov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接