参考:https://www.cnblogs.com/yyds/p/7288916.html
命令行指令的执行通常有两个我们比较关注的结果:
- 命令执行的状态码——表示命令执行是否成功
- 命令执行的输出结果——命令执行成功后的输出
一、os与commands模块
函数名 | 描述 |
---|---|
os.system(command) | 返回命令执行状态码,而将命令执行结果输出到屏幕 |
os.popen(command).read() | 可以获取命令执行结果,但是无法获取命令执行状态码 |
commands.getstatusoutput(command) | 返回一个元组(命令执行状态码, 命令执行结果) |
说明:
- os.popen(command)函数得到的是一个文件对象,因此除了read()方法外还支持write()等方法,具体要根据command来定;
- commands模块只存在于Python 2.7中,且不支持windows平台,因此commands模块很少被使用。另外,commands模块实际上也是通过对os.popen()的封装来完成的。
示例:os.popen
import os
command = 'cat %s |grep -n "%s"' %(file_path, pn)
result = os.popen(command).read()
print(result)
总结
根据python版本选择对应的模块:
版本 | 模块 |
Python 2.4 - Python 3.5 | subprocess.call() |
Python 3.5及以上 | subprocess.run() |
- Python2.4版本引入了subprocess模块用来替换os.system()、os.popen()、os.spawn*()等函数以及commands模块;也就是说如果你使用的是Python 2.4及以上的版本就应该使用subprocess模块了。
- 如果你的应用使用的Python 2.4以上,但是是Python 3.5以下的版本,Python官方给出的建议是使用subprocess.call()函数。Python 2.5中新增了一个subprocess.check_call()函数,Python 2.7中新增了一个subprocess.check_output()函数,这两个函数也可以按照需求进行使用。
- 如果你的应用使用的是Python 3.5及以上的版本(目前应该还很少),Python官方给出的建议是尽量使用subprocess.run()函数。
- 当subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()这些高级函数无法满足需求时,我们可以使用subprocess.Popen类来实现我们需要的复杂功能。