Savvis
Savvis

Reputation: 53

Return a ping test result in Python

I'm trying to print results from a ping test on Windows. However, when the website times out the following error occurs:

IndexError: list index out of range.

Obviously, it's looking for the results but how can I make it say "Website not available" when it does time out?

try:
    ping = subprocess.Popen(["ping", "-n", "5", website], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, error = ping.communicate()

    minimum = int(re.findall(r"Minimum = (\d+)", out)[0])
    maximum = int(re.findall(r"Maximum = (\d+)", out)[0])
    average = int(re.findall(r"Average = (\d+)", out)[0])
    packet = int(re.findall(r"Lost = (\d+)", out)[0])

    if packet > 1:
        packet = 5 / packet * 100

    except subprocess.CalledProcessError:
        print "Couldn't get a ping"

Upvotes: 1

Views: 11453

Answers (1)

seth
seth

Reputation: 1788

What about something like

edit : try this:

import re
import subprocess
website = "google.com"
try:
    ping = subprocess.Popen(["ping", "-n", "-c 5", website], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, error = ping.communicate()
    if out:
        try:
            minimum = int(re.findall(r"Minimum = (\d+)", out)[0])
            maximum = int(re.findall(r"Maximum = (\d+)", out)[0])
            average = int(re.findall(r"Average = (\d+)", out)[0])
            packet = int(re.findall(r"Lost = (\d+)", out)[0])
            if packet > 1:
                packet = 5 / packet * 100
        except:
            print "no data for one of minimum,maximum,average,packet"
    else:
        print 'No ping'

except subprocess.CalledProcessError:
    print "Couldn't get a ping"

Upvotes: 3

Related Questions