我试图使我的代码与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。我想。
答案 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
似乎特定于BSD和OSX(从BSD派生)和is not a part of the POSIX standard。
使用“包罗万象”的错误退出代码的动机是,没有附加信息,接收过程无论如何都无法对错误做出任何明智的选择。 stderr
是传递此类信息的更好方法。