Python2.7 subprocess模块学习

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

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、一、2都将被关闭。
      cwd:若是被设置,子进程在执行前会改变当前目录为设置值。
      env:设置子进程的环境变量

spa

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。
unix


下面来讲说一些好用的函数:
     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
code

相关文章
相关标签/搜索