subprocess  模块

subprocess称之为子进程,进程是一个正在进行的程序

子进程是由另一个正在运行的程序启动的程序,例如QQ聊天点击一个链接,打开了浏览器,那么浏览器称之为QQ的子进程

为什么要子进程?

当我们有个一任务需要处理,而自己无法处理,需要其他程序处理

import os
​
os.system(r'"D:\ProgramFiles(x86)\Tencent\QQ\Bin\QQScLauncher.exe"')
res = os.system("dir")
print(res)
​
#在os模块中,os.system在执行系统指令时,也可以命令操作系统启动某个程序
​
​
#os.system和subprocess的区别
os.system在执行的时候,直接将结果输出到控制台,如果我们要获取了执行结果,就无能为力了
subprocess不仅可以启动子进程,还能与子进程进行交互
​
​
#subprocess的具体用法
import subprocess
p = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE)
print(p.stdout.read())
​
#上述代码是启动了一个dir的子程序,并将结果输出到指定的管道位置
dir        表示要执行的命令
​
shell      表示dir是一个命令
​
stdout     指定输出的管道位置
​
#什么是管道?
#管道类似于生活中的水管,从一端给入介质,在另一端将收到同样的介质。在程序中,数据就相当于介质,管道的作用就是从一个进程中把数据传输到另一个进程
#本质就是读写同一个文件
#eg:
p1 = subprocess.Popen('tasklist', 
                      shell=True,
                      stdout=subprocess.PIPE)
p2 = subprocess.Popen('findstr  cmd',#要执行的指令  cmd是参数指令
                      shell=True, #第一个参数是否是指令
                      stdin=p1.stdout, #指定输入管道
                      stdout=subprocess.PIPE, #指定输出管道
                      stderr=subprocess.PIPE)  #指定错误管道,当进程出错时,可在错误管道获取结果
# 读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decode("GBK"))
#在p1中是启动一个tasklist的子进程,指定输出结果到管道中
#p2是启动一个findstr的子进程,将p1进程结果作为p2进程输入

 

1.当需要在python程序中启动子进程时,如果需要数据交互就要用subprocess
2.当不需要数据交互时,可以使用os.system
posted on 2018-12-10 18:46  小锦毛  阅读(195)  评论(0编辑  收藏  举报