本文主要对比3种python执行命令执行方法
1、os.system(cmd)
特点:
1、无法获取cmd执行的结果,返回的是执行的退出码
2、当前是deprecated。
3、直接使用是阻塞的,使用线程启动是非阻塞的
2、os.popen(cmd)
特点:打开一个管道,它通往/接受自命令 cmd
1、为文件管道,所以最佳实践
with os.popen(command, "r") as p:
r = p.read()
2、非阻塞,可以使用read(),readlines()实现阻塞
3、subprocess
官方推荐使用api
1、常用高级别api subprocess.run ; 当需要细节控制执行过程或者执行结果的处理,可以使用低层级api subprocess.Popen, 然后使用communicate(),wait等api
2、当subprocess.run/subprocess.Popen第一参数输入为字符窜,需带上参数Shell=true,表明按照shell脚本执行字符窜;当一次参数输入为列表,则Shell=False(默认为False)
3、从防止命令注入的角度,如果字符窜为外部输入,第一个参数建议使用数组