什么是Python的默认退出代码?

时间:2016-03-21 16:24:11

标签: python exit-code

假设您的脚本由于任何类型的失败而退出(异常,语法错误)并且脚本由于sys.exit()os._exit()而退出,Python如何?找出要退出的退出代码?

它似乎是0,这是有道理的,因为它表示* nix系统没有错误。但是,它总是会以0退出(除上述情况除外)吗?令人惊讶的是,经过相当多的在线搜索后,除非另有说明,否则我无法找到明确表示会以0退出的任何内容。

4 个答案:

答案 0 :(得分:3)

如果你看cpython source code

    main()中的
  1. Programs/python.c会返回Py_Main()
  2. 的返回值 Py_Main()中的
  3. Modules/main.c会返回run_file()
  4. 的返回值
  5. run_file()Modules/main.c也返回0,除非PyRun_AnyFileExFlags()返回非零
  6. {li} PyRun_AnyFileExFlags() Python/pythonrun.cexit()中的SystemExit 如果发生run_file()异常,则不会返回 脚本设置退出代码。如果存在,它将仅返回非零 是一个内部错误。

    因此0的返回值是脚本Select *, CASE WHEN COUNT(X.id ) >1 THEN 'X' ELSE '' END AS testing from TestTable Group by * 的默认退出代码。

答案 1 :(得分:3)

sys.exit documents a default exit status of 0os._exit's docs specify a UNIX-like OS constant for "normal" exit status, os.EX_OK,但我一般都没有找到退出状态的文件保证。

除此之外,我能给你的最好的是,在CPython中,python可执行文件(包括Windows上的python.exe / pythonw.exe)在python.c中实现调用Py_Main并返回它返回的内容;根据{{​​1}}上记录的保证,退出状态为:

  

Py_Main如果解释器正常退出(即没有例外),0如果解释器由于异常而退出,或1如果参数列表不表示有效Python命令行。

     

请注意,如果引发了其他未处理的2,则此函数不会返回SystemExit,但只要未设置1,就会退出该过程。

所以这意味着在没有活动异常的情况下简单地运行Py_InspectFlag模块的末尾应始终为CPython返回__main__,尽管备用解释器在技术上不是 required 做同样的事。

答案 2 :(得分:1)

在0之前以0退出很长时间,它是POSIX standard的一部分。所有表现良好的程序都表示成功退出0。

答案 3 :(得分:1)

Python的默认退出代码为0.这在此处记录https://docs.python.org/2/library/exceptions.html#exceptions.SystemExit

但是,退出代码将是<a href="newPage.htm" {{action 'emptyAction' preventDefault=false}}>Go</a> exit()函数中指定的任何内容。因此,如果您使用的是脚本,则应始终在脚本或脚本文档中检查该特定脚本将返回的内容。例如:您可以在终端中启动python,只需键入quit(),即使没有错误,它也会以返回码1退出。