我收到一条消息,上面写着 脚本 xyz.py 返回退出码 0
。这是什么意思?
在 Python 中,退出码代表什么?有多少种退出码?哪些退出码比较重要?
在许多编程语言中,退出代码由程序员自己决定。因此,您需要查看程序源代码(或手册)。零通常意味着“一切顺利”。
解决方法: 为了应对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
script program.py returned error code 0
意味着program.py没有任何错误。只需将您得到的数字输入到os.strerror()
中,即可将其转换为一条消息。
要退出Python代码的任何位置,你可以使用sys.exit()
。
这被称为正常终止,用例包括: a) 错误密码 b) 错误的API密钥 c) 发生异常等等。
代码示例:
import sys; sys.exit()
exit(0)
内置函数进行干净的关闭,而不是使用sys.exit()
函数来突然终止进程。SystemExit
似乎都会被触发。 - 0xC0000022Los._exit
搞混了,两者似乎都会引发 SystemExit
。 - vidstigesys.exit()
和 exit()
一样,都能够干净地关闭程序。它们都会引发 SystemExit
异常,实际上 exit()
更适用于交互式会话,而非脚本。因此在概念上讲,sys.exit()
是更合适的选择。你可能和 os._exit()
混淆了,后者才是会导致程序突然终止的函数。 - MestreLionexit()
甚至不是真正的内置函数;当导入site
模块时,它被强行加入内置函数中。这在大多数情况下是隐式发生的,但对于那些试图快速运行且不依赖第三方模块(安装在site-packages
中)的Python脚本,可以使用-S
开关来禁用完全导入site
,并且exit()
将不存在(sys.exit()
仍然存在)。 - ShadowRanger