文章目录
- 一、os.system方法
- 二、os.popen方法
- 三、commond模块
- 四、subprocess模块
一、os.system方法
在子终端运行系统命令,可以获取命令执行后的返回信息
以及执行返回的状态
。
执行后返回两行结果:
- 第一行是结果,
- 第二行是执行状态信息,如果命令成功执行,这条语句返回0,否则返回1。
import os
print(os.system('date'))
由于python3默认采用了UTF-8
编码,而WIN8的CMD窗口采用的是GBK
编码,导致了编码不同。
但是,如果简单的通过encode('gbk')
之类的方法,不能解决根本问题。
尤其是当我们根本不是使用print命令来输出,而是控制台默认输出
的情况下,是没办法修改os.system的编码格式的,因为os.system执行命令返回的并不是命令中出现的文本,而是一个int,为0时表示成功,为1时表示异常。
Pycharm下的解决方法:
二、os.popen方法
os.popen()方法不仅执行命令而且返回执行后的信息对象(常用于需要获取执行命令后的返回信息
),是通过一个管道文件将结果返回。
import os
os.popen()
使用 os.popen('指令').read()
来回去具体的返回信息。
三、commond模块
注意1: 在类unix
的系统下使用此方法返回的返回值(status)与 脚本或命令执行之后的返回值不等
,这是因为调用了os.wait()的缘故,具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作
就可以了。
注意2: 当执行命令的参数或者返回中包含了中文文字
,那么建议使用subprocess
。
四、subprocess模块
subprocess模块运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。
subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands.*等。
subprocess通过子进程
来执行外部指令
,并通过input/output/error管道
,获取子进程的执行的返回信息。