subprocess 称之为子进程,进程是一个正在运行的程序
为什么要使用子进程,因为之前的os.system()函数无法获取命令的执行结果,另一个问题是当我们启动了某一其他进程时无法与这个子进程进行通讯,
当要在python程序中执行系统指令时 就应该使用subprocess
#测试 res = os.system("python") print(res) # res结果为执行状态
import subprocess p = subprocess.Popen("ls",shell=True) #shell=True 告诉系统这是一个系统指令 而不是某个文件名 #此时效果与sys.system()没有任何区别,都是将结果输出到控制台 # 那如何与这个进程交互数据呢,这需要用到三个参数 1.stdin 表示输入交给子进程的数据 2.stdout 表示子进程返回的数据 3.stderr 表示子进程发送的错误信息 #这三个参数,的类型都是管道,(管道本质就是一个文件,可以进行读写操作),使用subprocess.PIPE来获取一个管道
理解了三个参数的意义后让我们来实现一个小功能
一个子进程执行tasklist命令获取所有的任务信息,然后将结果交给另一个进程进行查找
另一个子进程执行findstr 查找某个任务信息
p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE) p2 = subprocess.Popen("findstr smss",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE) print(p2.stdout.read())
总结: subprocess 主要用于执行系统命令,对比sys.system 区别在于可以在进程间交换数据