運行python的時候,我們都是在創建並運行一個進程。像Linux進程那樣,一個進程可以fork一個子進程,並讓這個子進程exec另外一個程序。在Python中,我們通過標准庫中的subprocess包來fork一個子進程,並運行一個外部的程序。 subprocess包中定義有數個創建子進程的函數,這些函數分別以不同的方式創建子進程,所以我們可以根據需要來從中選取一個使用。另外subprocess還提供了一些管理標准流(standard stream)和管道(pipe)的工具,從而在進程間使用文本通信。
subprocess.call()
父進程等待子進程完成
import subprocess a = subprocess.call(['ipconfig','/all']) print(a)
#執行命令,如果命令結果為0,就正常返回,否則拋異常
getstatusoutput()
接收字符串格式命令,返回元組形式,第1個元素是執行狀態,第2個是命令結果
import subprocess a = subprocess.getstatusoutput("whoami") print(a) #輸出 (0, 'desktop-xxxx\\admin')
getoutput()
接收字符串格式命令,並返回結果。
import subprocess a = subprocess.getoutput("whoami") print(a) #輸出
desktop-xxxx\admin
check_output()
執行命令,並返回結果,下例結果返回給a。
import subprocess a = subprocess.check_output(['ipconfig','/all']) print(a)
Popen()
上面的幾個函數都是基於Popen()的封裝(wrapper)。這些封裝的目的在於讓我們容易使用子進程。當我們想要更個性化我們的需求的時候,就要轉向Popen類,該類生成的對象用來代表子進程。
import subprocess a = subprocess.Popen(['ping','-c','1','www.baidu.com'],shell=True) a.wait()