共计 1197 个字符,预计需要花费 3 分钟才能阅读完成。
Python 中执行系统命令常见的几种方法有
注意:以下实例代码在 Python3.5 下运行通过。
os.system(cmd)
在子终端运行系统命令,可以获取命令执行后的返回信息以及执行返回的状态
>>> import os
>>> os.system('date')
2018 年 4 月 8 日 星期日 19 时 29 分 13 秒 CST
0 #运行状态号,0 表示正确
执行后返回两行结果,第一行是结果,第二行是执行状态信息
os.popen(cmd)
不仅执行命令而且返回执行后的信息对象 (常用于需要获取执行命令后的返回信息),是通过一个管道文件将结果返回
>>> import os
>>> nowtime = os.popen('date')
>>> print(nowtime.read())
2018 年 4 月 8 日 星期日 19 时 30 分 35 秒 CST
方法 说明
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。
运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。有丰富的参数可以进行配置,可供我们自定义的选项多,灵活性高。之前我使用 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