关于os.system()与sys.exit()函数的使用技巧
1. sys.exit()函数
sys.exit() 引发一个 SystemExit异常,若没有捕获这个异常,Python解释器会直接退出;捕获这个异常可以做一些额外的清理工作。0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。
这里的官方翻译并不准确。首先,Python只会退出当前文件所调用的解释器,对于上层调用它的进程并不做处理。其次,sys.exit(num)中的num可以为任意值,并没有一个明确的值域规定。
为了便于理解,我们直接用测试程序来研究sys.exit()函数功能。
进程终止测试
我们编写如下py1.py代码:1
2
3
4
5
6
7 import sys
print("try to kill the program")
sys.exit(200)
print("test fail")
out:
try to kill the program
[Finished in 0.2s with exit code 200]
进程终止成功,没有输出test fail证明程序没有运行到print(“test fail”)。同时我们注意到在结束状态描述中有exit code 200,这是sys.exit(200)函数抛出的终止进程200异常,这个异常号是可以再sys.exit(num)中配置的。
对于sys.exit()异常,我们可以用SystemExit捕获,测试代码如下:1
2
3
4
5
6
7
8
9 try:
print("try to kill the program")
sys.exit(200)
except SystemExit as e:
print(e)
out:
try to kill the program
200 #捕获到SystemExit异常,异常状态码为200
[Finished in 0.2s]
2. os.system()函数
os模块中的system()函数可以方便地运行其它程序或者脚本。其函数原型如下所示。
os.system(command):command表示要执行的命令,相当于在Windows的cmd窗口中输入的命令。如果要向程序或者脚本传递参数,可以使用空格分隔程序及多个参数。同时,os.system()有int型返回值,其意义为引用文件执行结果(0为正常退出,其余值均为异常退出)
我们在py1.py目录新建py2.py文件,编写如下测试代码:1
2
3
4
5
6
7 import os
ret=os.system("py1.py")
print(ret)
out:
try to kill the program #py1.py执行结果输出
200 #py1.py系统退出异常状态码
[Finished in 0.3s]
3. 总结
综上,我们可以在执行同步子程序中设定失败返回sys.exit(num)状态码,在上层通过os.system()调用后,获取其退出状态码进行相关终止程序操作。
最理想的状态是将底层的异常全部在上层代码处理,利用这一方法,可以设定退出状态码表,根据状态码编写对应操作步骤,使得python脚本文件更方便编写与维护。