(5)subprocess模块(执行系统命令)
这个模块的主要用途就是执行系统命令
什么是进程
一个程序运行起来了就是一个进程
但是程序本身不是进程,程序是一对代码而已
所以进程就是一个抽象的概念,就是程序运行起来的一个过程
进程和进程之间是相互独立的,互不影响
如何理解子进程和父进程
抽象的说一个QQ程序是一个父进程,word就是一个子进程,两个互不干预,当然这只是一个比喻
subprocess模块的用途
让父进程从管道内获取子进程运行的结果
调用格式(这个模块的调用时一个固定的格式)
import subprocess
obj=subprocess.Popen(
'tasklasdfist', #第一个参数是一个字符串形式的命令
shell=True, #第二个参数是调用命令解释器(如调用cmd)
stdout=subprocess.PIPE, #第三个参数stdout是指标准输出,输出的对象就是subrocess.PIPE(管道)
stderr=subprocess.PIPE #第四个参数stderr是指错误输出,输出的对象就是subrocess.PIPE(管道)
)
res=obj.stdout.read() #从正确管道内读取结果 (obj是一个特殊的对象,这个特殊的对象下面可以调用一个srdout(对应的就是正确的管道)下调用一个read
print(res.decode('gbk')) #根据系统的编码进行解码读取
res=obj.stderr.read() #这是从错误管道内获取结果
print(res.decode('gbk'))
PS:管道的概念,什么是管道,可以想象成生活中的管道,作用就是因为进程和进程之间是相互隔离的,无法传播数据,所以用管道可以把子进程和父进程关联起来
PS:管道内读取的结果是以系统的编码格式返回的二进制字符,所以在打印时候需要根据系统的编码进行解码