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