subprocess.Popen
是一個用于創(chuàng)建新進程的函數(shù),通過調用系統(tǒng)的命令或其他可執(zhí)行文件來執(zhí)行指定的操作。
subprocess.Popen
的常用參數(shù)如下:
args
:一個字符串或者一個包含字符串的列表,用于指定要執(zhí)行的命令或可執(zhí)行文件及其參數(shù)。bufsize
:一個可選的整數(shù)參數(shù),用于設置緩沖區(qū)的大小,默認值為0(無緩沖)。stdin
、stdout
、stderr
:分別用于指定標準輸入、標準輸出和標準錯誤的流。它們可以是文件對象,也可以是一個整數(shù),表示對應的文件描述符。默認值為None,表示繼承父進程的對應流。shell
:一個可選的布爾值參數(shù),用于指定是否通過shell來執(zhí)行命令。默認值為False。universal_newlines
:一個可選的布爾值參數(shù),用于指定是否將輸入和輸出文本模式轉換為通用的換行符(\n
)。默認值為False。subprocess.Popen
返回一個Popen
對象,可以通過該對象的方法和屬性來與新進程進行交互。常用的方法和屬性如下:
communicate(input=None)
:與子進程進行交互,向其發(fā)送數(shù)據(jù)(如果有)并等待其完成。該方法返回一個包含標準輸出和標準錯誤輸出的元組。wait()
:等待子進程結束,并返回其退出狀態(tài)。poll()
:檢查子進程是否已經(jīng)結束,如果已經(jīng)結束返回退出狀態(tài),否則返回None。terminate()
:終止子進程。kill()
:殺死子進程。returncode
:子進程的退出狀態(tài)。下面是一個使用subprocess.Popen
的簡單示例:
import subprocess
# 執(zhí)行一個命令并獲取輸出
result = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output = result.communicate()[0].decode("utf-8")
print(output)
# 執(zhí)行一個命令并等待其完成
subprocess.Popen(["ls", "-l"]).wait()
print("Done")
上述示例中,首先使用subprocess.Popen
執(zhí)行了一個ls -l
命令,并通過stdout=subprocess.PIPE
參數(shù)將標準輸出重定向到一個管道,然后通過communicate()
方法獲取了命令的輸出,并將其轉換為字符串并打印出來。接著使用subprocess.Popen
執(zhí)行了另一個ls -l
命令,然后使用wait()
方法等待命令完成,并在命令完成后打印出"Done"。