Python2.7 subprocess模块学习

    subprocess模块允许你通过popen类来产生、管理进程。它可以代替os.system、os.spawn*、os.popen*、popen2.*、commands.*模块的相关方法。它会在新的子进程中执行子程序。在类unix中,popen类使用os.execvp()执行子进程。

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

Popen参数:

      args:可以是列表或者字符串。如果args是一个列表,则列表的第一个元素会被执行
      shell:指定是否使用shell执行程序,如果shell=True,建议args是字符串,比列表好一些。在unix中shell默认是/bin/sh,如果args是列表,则第一个元素是命令,其余其他的元素会被认为是该命令的参数。
      bufsize:和内建函数open()的意义一样,0表示没有缓冲,1表示行缓存,其他正值表示缓冲区大小,负值表示默认使用系统缓冲配置。
      executable:指定程序的执行环境,在shell=False时很有必要设置该参数。如果shell=True,executable默认就是/bin/sh
      stdin/stdout/stderr:指定执行程序的标准输入、输出、错误。值可以是PIPE或者已经存在的文件描述符、或者文件对象、或者None,stderr的值还可以设置为STDOUT。PIPE表示在子进程中新建一个pipe。
      preexec_fn:在子进程执行之前执行
      close_fds:如果为true,在执行子进程前所有的文件描述符除了0、1、2都将被关闭。
      cwd:如果被设置,子进程在执行前会改变当前目录为设置值。
      env:设置子进程的环境变量

Popen的方法有:
     x.poll():检查子进程是否中止
     x.wait():等待子进程结束
     x.communicate():防止死锁
     x.send_signal():给子进程发送信号
     x.kill():kill子进程,在unix上是发送SIGKILL信号
     x.terminate():停止子进程,在unix上是发送sigterm信号
     x.pid():子进程id
     x.returncode():子进程返回码
     x.stdin/stdout/stderr:如果在Popen中设置的是PIPE,只是后可以使用read、write
注意:Popen.communicate(input=None)和子进程交互。发送数据到stdin,并从stdout和stderr读数据,直到收到EOF。等待子进程结束。可选的input如有有的话,要为字符串类型。此函数返回一个元组: (stdoutdata , stderrdata ) 。要给子进程的stdin发送数据,则Popen的时候,stdin要为PIPE;同理,要可以接收数据的话,stdout或者stderr也要为PIPE。


下面来说说一些好用的函数:
     subprocess.call():执行args的命令,然后返回returncode。
     subprocess.check_all():执行args的命令,如果返回returncode是0,则正常返回,否则返回CalledProcessError错误
     subprocess.check_output():执行args命令,以字符串返回输出
     subprocess.PIPE:可以被用于popen的stdin、stdout、stderr等三个参数的值,表示要创建先管道
     subprocess.STDOUT:可被用于popen的stderr


你可能感兴趣的:(python,subprocess)