Python退出并出现错误:使用sysexits.h或errno.h代码?

时间:2018-10-16 17:34:59

标签: python linux shell

我试图使我的代码与Linux系统上的其他子代很好地兼容,并且我想使用对外壳有意义的退出代码。

在开始的特定情况下,当尝试写入不存在的目录时,我发现了两个候选代码:

#define EX_CANTCREAT 73  /* can't create (user) output file */

sysexits.h中(有效):

errno.ENOENT = 2         # No such file or directory

在Python的errno模块中。

对于sys.exit(),是否比另一个更合适?

我注意到Python提供了errno,并且有一个相应的errno.h,但是我没有看到为sysexits.h预先构建的Pythonic ...


编辑:我正在尝试确定是否应该使用更特定的退出代码,如果是,则使用哪一组预定义代码。下面的答案给出了一个明确的“否”:作为退出代码,将0表示成功,将1表示失败。使用errno代码处理stderr消息,至少在Linux上,请远离sysexits.h。我想。

1 个答案:

答案 0 :(得分:1)

作为一个规则(具体来说,是由UNIX设置的先例),程序仅使用一些退出代码:0表示成功; (可选)彼此之间没有错误的有效结果(例如for grep -- if no matches were found);一个错误。 “任何错误”的代码通常是最高的。有些程序使用特殊的代码来处理某些错误,但这些错误很少且相差很远。

(如果操作系统终止进程,则使用许多退出代码(在Windows中为in UNIX, 128+,在a few NTSTATUS values that look like large negative numbers中使用),因此在程序中生成它们对于避免造成混乱。)

有关错误is supposed to be printed on stderr的其他任何具体信息。


sysexits.h似乎特定于BSDOSX(从BSD派生)和is not a part of the POSIX standard


使用“包罗万象”的错误退出代码的动机是,没有附加信息,接收过程无论如何都无法对错误做出任何明智的选择。 stderr是传递此类信息的更好方法。