我收到一条消息,说脚本xyz.py返回退出代码0。这是什么意思?

Python中的退出码是什么意思?有多少个?哪些是重要的?


当前回答

操作系统命令有退出码。请查看Linux退出代码以了解有关这方面的一些材料。shell使用退出代码来决定程序是否工作、是否存在问题或是否失败。有一些努力来创建标准的(或者至少是常用的)退出码。请参阅这篇高级Shell脚本文章。

其他回答

为了允许异常处理程序和其他事情执行,我建议使用内置的exit(0)干净地关闭,而不是使用sys.exit()突然终止进程。

处理: 为了解决gitlab-ci (https://gitlab.com/gitlab-org/gitlab-runner/-/issues/27668)中的错误,我简单地生成了一个包含错误代码的文件:

Python的部分:

with open("error_code.log", 'w') as file:
   file.write('2') # this will trigger a warning

然后在yml文件中:

.step_name:
  variables:
    # my vars
  script:
    - python my_code.py arg1 arg2
    - exit `cat error_code.log`
  allow_failure:
    exit_codes:
      - 2

答案是“取决于退出码0的含义”。

然而,在大多数情况下,这意味着“一切都很好”。


我喜欢POSIX:

因此,在shell中,我键入:

python script.py && echo 'OK' || echo 'Not OK'

如果我的Python脚本调用sys.exit(0), shell返回'OK'

如果我的Python脚本调用sys.exit(1)(或任何非零整数),shell返回'Not OK'。

巧妙地使用shell是您的工作,并阅读脚本的文档(或源代码)以了解退出代码的含义。

您要在脚本中查找对sys.exit()的调用。该方法的参数作为退出代码返回给环境。

脚本很可能从未调用退出方法,而0是默认的退出代码。

退出码只有脚本作者指定的意义。Unix的传统是,退出码0表示“成功”,否则就是失败。要确定给定脚本的退出码意味着什么,唯一的方法是检查脚本本身。