What is Python's default exit code?
If you look at the cpython source code:
main()
inPrograms/python.c
returns the return value ofPy_Main()
Py_Main()
inModules/main.c
returns the return value ofrun_file()
run_file()
, also inModules/main.c
returns0
unlessPyRun_AnyFileExFlags()
returns non-zeroPyRun_AnyFileExFlags()
inPython/pythonrun.c
willexit()
in the event of aSystemExit
exception and so will not return if the script sets an exit code. It will only return non-zero if there is an internal error.
So the return value of run_file()
is what makes the default exit code of a script 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
, but there is no documented guarantee I can find for the exit status in general.
Aside from that, the best I can give you is that in CPython, the python
executable (including python.exe
/pythonw.exe
on Windows) is implemented in python.c
by calling Py_Main
and returning whatever it returns; per the documented guarantees on Py_Main
, the exit status is:
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.
so this implies that simply running off the end of the __main__
module without an active exception should always return 0
for CPython, though alternate interpreters are not technically required to do the same.
This tracks with the implied exit status rules expected of most applications; while nothing explicitly says Python has to follow those rules, it would be extremely unusual for a tool that grew up in the command line UNIX-like world to violate those conventions.