subprocess模块
模块的作用
1.运行python的时候,我们都是在创建并运行一个进程,linux中一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。
2.需要通过python去执行一条系统命令或者脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程。
其他类似于功能的模块
os.systrm
os.command
os.popen
也可以调用系统命令,比较乱,于是推出subprocess,提供统一的模块来实现对系统命令或脚本的调用
三种执行命令的方法
-
subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐
-
subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法
-
subprocess.Popen() #上面各种方法的底层封装
subprocess实际例子
subprocess.run(['df','-h'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)
涉及到管道|的命令需要这样子写:
subprocess.run('df -h|grep disk1',shell=True) #shell=True的意思是这条命令直接交给系统去执行,不需要python负责解析
os实际例子
1.os.systrm():执行操作系统的命令,将结果输出到屏幕,只返回命令执行状态(0:成功,非0:失败)
2.os.popen:执行操作系统的命令,会将结果保存在内存当中,可以用read()方式读取出来