使用Popen方法時,需要獲取輸出內容時可以按如下方法獲取:
1 # -*- coding:utf-8 -*- 2 3 import subprocess 4 cmd = r"ping www.baidu.com" 5 result = subprocess.Popen(cmd, stdout=subprocess.PIPE) # 將輸出內容存至緩存中 6 print(result.stdout.read().decode("gbk")) # 通過從緩存中讀取內容並解碼顯示 7 8 輸出顯示如下: 9 正在 Ping www.wshifen.com [103.235.46.39] 具有 32 字節的數據: 10 來自 103.235.46.39 的回復: 字節=32 時間=334ms TTL=39 11 來自 103.235.46.39 的回復: 字節=32 時間=340ms TTL=39 12 來自 103.235.46.39 的回復: 字節=32 時間=317ms TTL=39 13 來自 103.235.46.39 的回復: 字節=32 時間=342ms TTL=39 14 15 103.235.46.39 的 Ping 統計信息: 16 數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 17 往返行程的估計時間(以毫秒為單位): 18 最短 = 317ms,最長 = 342ms,平均 = 333ms 19 20 21 Process finished with exit code 0
獲取Popen的輸出時,可以通過 stdout從緩存中讀出來,那怎么寫到緩存中呢,只需要在Popen方法的參數中帶上stdout=subprocess.PIPE這個關鍵字參數即會寫入到緩存中,當然了,這個里面還有一個參數stdin這個關鍵字參數,這個參數可以接收到從其它管道中的輸出做為這次的輸入,例如:
1 import subprocess 2 child1 = subprocess.Popen(["cat","/etc/passwd"], stdout=subprocess.PIPE) 3 child2 = subprocess.Popen(["grep","0:0"],stdin=child1.stdout, stdout=subprocess.PIPE) 4 out = child2.communicate()