Python执行系统命令的4种方法与对比
本文详细解析Python中执行系统命令的四种常用方法:os.system、os.popen、commands模块以及subprocess模块。通过对比各方法的返回值、灵活性及适用场景,重点推荐subprocess模块处理复杂参数与中文编码问题,并提供Python3.5下的实际运行示例与注意事项。
在Python开发中,调用外部系统命令是常见需求,主要存在以下4种实现方式。
注:以下示例代码均基于Python 3.5环境测试通过。
一、使用os.system方法
调用格式为:os.system(cmd)
该方法会在子终端中执行系统命令,并返回命令执行后的状态信息以及退出码。
>>> import os
>>> os.system('date')
2018年 4月 8日 星期日 19时29分13秒 CST
0 #运行状态号,0表示正确
执行后返回两行结果,第一行是结果, 第二行是执行状态信息
二、使用os.popen方法
调用格式为:os.popen(cmd)
该方法不仅执行命令,还通过管道文件将执行后的信息对象返回,适用于需要获取命令输出内容的场景。
>>> import os
>>> nowtime = os.popen('date')
>>> print(nowtime.read())
2018年 4月 8日 星期日 19时30分35秒 CST
三、使用commands模块
getoutput:获取执行命令后的返回信息
getstatus:获取执行命令的状态值(执行命令成功返回数值0,否则返回非0)
getstatusoutput:获取执行命令的状态值以及返回信息
>>> import commonds
>>> status, output = commands.getstatusoutput('date')
>>> print(status) # 0
>>> print(output) # 2018年 4月 8日 星期日 19时31分45秒 CST
注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故,具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。
注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。
四、使用subprocess模块
该模块通过线程控制与监控机制,将执行结果赋值给变量,便于程序后续处理。它提供丰富的配置参数,灵活性高。此前使用os.system时曾遇到文件描述符被子进程继承的问题,后来通过设置 close_fds = False 参数得以解决。官方文档:http://python.usyiyi.cn/python_278/library/subprocess.html
>>> import subprocess
>>> nowtime = subprocess.Popen('date', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> print(nowtime.stdout.read())
2018年 4月 8日 星期日 19时32分41秒 CST
本文主要讲解的python执行系统命令4种方法与比较到这就结束了更多关于python执行系统命令的方法请查看下面的相关链接
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









