2012-02-21 133 views
4

我正在使用以下代碼來ping網站以檢查連接性。我如何解析結果以獲得「Lost =」來查看丟失了多少?使用Python和正則表達式解析windows命令結果

def pingTest(): 
    host = "www.wired.com" 
    ping = subprocess.Popen(
     ["ping","-n","4",host], 
     stdout = subprocess.PIPE, 
     stderr = subprocess.PIPE 
    ) 

    out,error = ping.communicate() 
    print out 

這是回報,我從出來

Pinging wired.com [173.223.232.42] with 32 bytes of data: 
Reply from 173.223.232.42: bytes=32 time=54ms TTL=51 
Reply from 173.223.232.42: bytes=32 time=54ms TTL=51 
Reply from 173.223.232.42: bytes=32 time=54ms TTL=51 
Reply from 173.223.232.42: bytes=32 time=54ms TTL=51 

Ping statistics for 173.223.232.42: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 54ms, Maximum = 54ms, Average = 54ms 
+2

如果你也發佈了你從'out'得到的字符串,那麼你怎麼樣去打印它呢? – PaulMcG 2012-02-21 14:00:33

+0

對不起 - 編輯! – lodkkx 2012-02-21 14:02:12

回答

6

第1步:構建一個匹配Lost = 0 (0% loss)的正則表達式,使用\d標籤替換數值,這將會變化。使用捕獲組來保存這些值。

步驟2:使用re.search掃描out字符串。

第3步:從re的捕獲組中提取值。

+3

給男人一個正則表達式,他會解析一天。教一個男人的正則表達式,他會解析一輩子!好答案! – 2012-02-21 14:35:50

3
lost = out.split('Lost = ')[1].split(',')[0] 

如果你這樣做你的榜樣得到的,失去了將包含0(0%的損失)

如果你只想你可以做的總數

lostTotal = out.split('Lost = ')[1].split(' ')[0] 

如果你所需的百分比,你可以做

lostPercent = out.split('%')[0].split('(')[1] 
0
import re 
lost = int(re.findall(r"Lost = (\d+)", out)[0]) 

這適用於一個regular expression捕獲後「迷失=」自帶並將其轉換爲整數數量。