Python 的默认退出代码是什么?
What is Python's default exit code?
假设您的脚本没有因为任何类型的故障(异常、语法错误)而退出,并且脚本没有因为 sys.exit()
或 os._exit()
而退出,Python 找出要退出的退出代码?
它似乎是 0,这是有道理的,因为它表示在 *nix 系统上没有错误。但是,是否总是以 0 退出(上述情况除外)?令人惊讶的是,经过相当多的在线搜索,我找不到任何明确表示它将以 0 退出的内容,除非另有说明。
以 0 退出早于 Python 很久,它是 POSIX standard 的一部分。所有运行良好的程序都以 0 指示成功退出。
Python 的默认退出代码是 0。这在此处记录 https://docs.python.org/2/library/exceptions.html#exceptions.SystemExit
但是,退出代码将是 exit()
或 quit()
函数中指定的任何内容。因此,如果您使用的是脚本,则应始终在脚本或脚本文档中检查该特定脚本将 return 的内容。例如:您可以在终端中启动 python,只需键入 quit(1)
,即使没有错误,它也会以 return 代码 1 退出。
如果你看 cpython source code:
main()
在 Programs/python.c
return 中的 return 值 Py_Main()
Py_Main()
在 Modules/main.c
return 中的 return 值 run_file()
run_file()
,也在Modules/main.c
returns 0
除非PyRun_AnyFileExFlags()
returns非零
PyRun_AnyFileExFlags()
在 Python/pythonrun.c
将 exit()
在
SystemExit
异常事件因此不会 return 如果
脚本设置退出代码。如果有,它只会 return 非零
是一个内部错误。
因此 run_file()
的 return 值是脚本的默认退出代码 0
。
sys.exit
documents a default exit status of 0
, and os._exit
's docs specify a UNIX-like OS constant for "normal" exit status, os.EX_OK
,但我找不到一般退出状态的书面保证。
除此之外,我能给你的最好的是在 CPython 中,python
可执行文件(包括 python.exe
/pythonw.exe
on Windows) 在 python.c
中通过调用 Py_Main
和 return 来实现 return;根据 Py_Main
上记录的保证,退出状态为:
0
if the interpreter exits normally (i.e., without an exception), 1
if the interpreter exits due to an exception, or 2
if the parameter list does not represent a valid Python command line.
Note that if an otherwise unhandled SystemExit
is raised, this function will not return 1
, but exit the process, as long as Py_InspectFlag
is not set.
所以这意味着只要 运行 关闭 __main__
模块的末尾而没有活动异常应该始终 return 0
for CPython,尽管在技术上不需要替代口译员做同样的事情。
此曲目与the implied exit status rules expected of most applications;虽然没有明确说明 Python 必须遵循这些规则,但对于一个在类 UNIX 命令行世界中成长起来的工具来说,违反这些约定是非常不寻常的。
假设您的脚本没有因为任何类型的故障(异常、语法错误)而退出,并且脚本没有因为 sys.exit()
或 os._exit()
而退出,Python 找出要退出的退出代码?
它似乎是 0,这是有道理的,因为它表示在 *nix 系统上没有错误。但是,是否总是以 0 退出(上述情况除外)?令人惊讶的是,经过相当多的在线搜索,我找不到任何明确表示它将以 0 退出的内容,除非另有说明。
以 0 退出早于 Python 很久,它是 POSIX standard 的一部分。所有运行良好的程序都以 0 指示成功退出。
Python 的默认退出代码是 0。这在此处记录 https://docs.python.org/2/library/exceptions.html#exceptions.SystemExit
但是,退出代码将是 exit()
或 quit()
函数中指定的任何内容。因此,如果您使用的是脚本,则应始终在脚本或脚本文档中检查该特定脚本将 return 的内容。例如:您可以在终端中启动 python,只需键入 quit(1)
,即使没有错误,它也会以 return 代码 1 退出。
如果你看 cpython source code:
main()
在Programs/python.c
return 中的 return 值Py_Main()
Py_Main()
在Modules/main.c
return 中的 return 值run_file()
run_file()
,也在Modules/main.c
returns0
除非PyRun_AnyFileExFlags()
returns非零PyRun_AnyFileExFlags()
在Python/pythonrun.c
将exit()
在SystemExit
异常事件因此不会 return 如果 脚本设置退出代码。如果有,它只会 return 非零 是一个内部错误。
因此 run_file()
的 return 值是脚本的默认退出代码 0
。
sys.exit
documents a default exit status of 0
, and os._exit
's docs specify a UNIX-like OS constant for "normal" exit status, os.EX_OK
,但我找不到一般退出状态的书面保证。
除此之外,我能给你的最好的是在 CPython 中,python
可执行文件(包括 python.exe
/pythonw.exe
on Windows) 在 python.c
中通过调用 Py_Main
和 return 来实现 return;根据 Py_Main
上记录的保证,退出状态为:
0
if the interpreter exits normally (i.e., without an exception),1
if the interpreter exits due to an exception, or2
if the parameter list does not represent a valid Python command line.Note that if an otherwise unhandled
SystemExit
is raised, this function will not return1
, but exit the process, as long asPy_InspectFlag
is not set.
所以这意味着只要 运行 关闭 __main__
模块的末尾而没有活动异常应该始终 return 0
for CPython,尽管在技术上不需要替代口译员做同样的事情。
此曲目与the implied exit status rules expected of most applications;虽然没有明确说明 Python 必须遵循这些规则,但对于一个在类 UNIX 命令行世界中成长起来的工具来说,违反这些约定是非常不寻常的。