2012-02-21 49 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捕获后“迷失=”自带并将其转换为整数数量。