(5)subprocess模块(子进程模块)

时间:2024-12-20 12:04:32

什么是进程

一个程序运行起来了就是一个进程

但是程序本身不是进程,程序是一对代码而已

所以进程就是一个抽象的概念,就是程序运行起来的一个过程

进程和进程之间是相互独立的,互不影响

如何理解子进程和父进程

抽象的说一个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:管道内读取的结果是以系统的编码格式返回的二进制字符,所以在打印时候需要根据系统的编码进行解码