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