在freeBSD上可以正常, 在centOS上不能正常。最后目标定位在脚本最后的代码上, 大概如下:
try:
if 测试条件:
do_someting()
sys.exit(0)
else:
sys.exit(1)
except Exception:
sys.exit(1)
centOS上, python的版本是2.4的。 freeBSD下安装的是2.5.
旧版本的Exception是基类: 因此在2.4上脚本永远是返回1的。
到了新的版本BaseException才是基类: 因此SystemExit和Exception是同一级。脚本可以返回0
这是迁移后的主要问题。 其实, 应该是作者不知道sys.exit的后果。作者把sys.exit当成os._exit了。
如下是APUE里的一幅图:
python的sys.exit是抛出一个异常:SystemExit, python会默认会catch这个异常, 大意为:
try:
我们的python代码
exception SystemExit:
做一些收尾工作, 如flush之类的