subprocess模块
subprocess模块是python从2.4版本开始引入的模块,主要用来取代一些旧的模块,如os.system,
os.spawn,os.popen等。
subprocess是通过子进程来执行外部命令的,并且可以自己制定stdin,stdout,stderr等管道。
内部支持的方法:
1) call(),只是用来执行一个外部命令,启动的子进程,输入输出自动绑定到父进程的输入和输出(标准输入输出),
内部的命令,可以是字符串,也可以是list。
a = subprocess.call('pwd')
a = subprocess.call(['pwd'])
2) check_call(),与call类似,只是返回值是非0时,会直接抛出异常。0-表示正常执行命令。
check_output(),类似,但是出现错误时,可以通过try,,,,exception,来避免传递到控制台。
可以捕获错误到exception中。
3) 指定管道的执行命令,Popen()函数,参数有:
args,shell命令,可以是字符串,也可以是list
bufsize,可以不用关心,主要来指定缓冲区的大小
stdin,stdout,stderr,指定程序的标准输入,输出,错误输出
cwd,设置子进程的当前目录
env,指定子进程的环境变量,默认继承父进程的环境变量。
a = subprocess.Popen(['mkdir', './hym'], cwd=‘/root’)
file_handle = open('file', w) a = subprocess.Popen('ls -l', stdout=filehandle) 指定file_handle
a = subprocess.Popen('cat ./file',stdout=subprocess.PIPE) 指定stdout到a对象
Popen返回的是一个对象,内部实现了commucation(),函数,可以从中拿到,用subprocess.PIPE指定的数据。
该对象内部的属性,有pid和returncode(0表示已经完成,none表示未完成)