/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())