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表示未完成)

原文地址:https://www.cnblogs.com/-9-8/p/8269165.html