/usr/bin目录中的Python可执行文件包装在sys.exit中

/usr/bin目录中的Python可执行文件包装在sys.exit中,python,Python,这两个代码段之间是否存在差异: if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) main() Vs 我明白了,我的ubuntu/usr/bin(or)/usr/local/bin目录中的大多数python可执行文件都使用sys.exit。函数返回后,进程不会停止 为什么人们将可执行函数包装在sys.exit中 注意:此代码取自openstack nov

这两个代码段之间是否存在差异:

if __name__ == '__main__':
  sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
  main()
Vs

我明白了,我的ubuntu/usr/bin(or)/usr/local/bin目录中的大多数python可执行文件都使用sys.exit。函数返回后,进程不会停止

为什么人们将可执行函数包装在sys.exit中

注意:此代码取自openstack nova python客户端,此问题只关注python的sys.exit,而不关注openstack内部。

sys.exit()
用于将正确的退出代码传递回shell。如果要在(例如)身份验证错误、网络问题、响应中断等情况下区分响应,则退出代码非常有用

如果不使用特定的
sys.exit(value)
,则只有两个选项—成功(退出代码0)或引发异常(退出代码1)。

sys.exit()
用于将正确的退出代码传递回shell。如果要在(例如)身份验证错误、网络问题、响应中断等情况下区分响应,则退出代码非常有用


如果不使用特定的
sys.exit(value)
,则只有两个选项—成功(退出代码0)或引发异常(退出代码1)。

如文档中所述,实际上有两种使用方法

您的
main
可以在成功时返回0,在出错时返回1(或2-127之间的任何其他数字);该数字将成为程序的退出状态。(数字2有一个特殊的含义;它意味着失败是因为无效的参数。一些参数解析库将自动
sys.exit(2)
,如果它们无法解析命令行。其他数字3-127都表示您希望它们做的任何事情。)

或者,您可以在成功时返回
None
,在失败时返回字符串(或具有有用的
\uuuu str\uuu
方法的任何对象)。
None
表示退出状态为0,其他任何内容都会被
print
ed发送到
stderr
,并给出退出状态1

过去,传统的做法是使用第二种形式来表示失败,方法是从
main
函数中执行类似于
返回“未能打开文件”
的操作,文档中仍然提到这样做,但现在已经不常见了;输出您想要的内容并返回您想要的号码同样容易,而且更加灵活



如果您只是从脚本末尾掉下来,没有
sys.exit
,这相当于
sys.exit(0)
;如果通过异常退出,这相当于将回溯传递到
sys.exit
——它将回溯打印到
stderr
,并以状态1退出。

如文档中所述,实际上有两种使用方法

您的
main
可以在成功时返回0,在出错时返回1(或2-127之间的任何其他数字);该数字将成为程序的退出状态。(数字2有一个特殊的含义;它意味着失败是因为无效的参数。一些参数解析库将自动
sys.exit(2)
,如果它们无法解析命令行。其他数字3-127都表示您希望它们做的任何事情。)

或者,您可以在成功时返回
None
,在失败时返回字符串(或具有有用的
\uuuu str\uuu
方法的任何对象)。
None
表示退出状态为0,其他任何内容都会被
print
ed发送到
stderr
,并给出退出状态1

过去,传统的做法是使用第二种形式来表示失败,方法是从
main
函数中执行类似于
返回“未能打开文件”
的操作,文档中仍然提到这样做,但现在已经不常见了;输出您想要的内容并返回您想要的号码同样容易,而且更加灵活



如果您只是从脚本末尾掉下来,没有
sys.exit
,这相当于
sys.exit(0)
;如果您通过异常退出,这相当于将回溯传递到
sys.exit
-它将回溯打印到
stderr
,并以状态1退出。

您能告诉我们
main()
的源代码吗?我猜它会返回一个退出代码,但根据您提供的代码我无法判断。作为补充说明,您在这些目录中找到的大多数Python可执行文件可能是(a)Ubuntu的一部分,(b)由setuptools的标准入口点生成,或者(c)两者兼而有之。所以,它们都很相似也就不足为奇了。你能告诉我们
main()
的来源吗?我猜它会返回一个退出代码,但根据您提供的代码我无法判断。作为补充说明,您在这些目录中找到的大多数Python可执行文件可能是(a)Ubuntu的一部分,(b)由setuptools的标准入口点生成,或者(c)两者兼而有之。所以,它们都很相似也就不足为奇了。
if __name__ == '__main__':
  sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
  sys.exit(main())