Parsing windows kommando resultater med Python og regex

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger følgende kode til at pinge et websted for at tjekke for tilslutning. Hvordan kan jeg analysere resultaterne igen for at få 'Lost =' for at se, hvor mange der gik tabt?


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


Dette er den retur, jeg kommer fra ud


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

Bedste reference


Trin 1: Konstruer et regulært udtryk, der matcher Lost = 0 (0\% loss), ved hjælp af d tags til at erstatte de numeriske værdier, som vil variere. Brug capturing grupper til at bevare disse værdier.


Trin 2: Brug re.search til at scanne strengen out.


Trin 3: Uddrag værdierne fra re 's capturing grupper.

Andre referencer 1


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


Hvis du gør dette med dit eksempel, vil tabte indeholde 0 (0\% tab)


Hvis du bare vil have det samlede beløb, du kan gøre


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


Hvis du vil have den procentdel, du kan gøre


lostPercent = out.split('\%')[0].split('(')[1]

Andre referencer 2


import re
lost = int(re.findall(r"Lost = (d+)", out)[0])


Dette gælder et regulært udtryk for at fange det tal, der kommer efter 'Lost =' og konverterer det til et heltal. [10]