subprocess 的 Popen用法


使用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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM