Reputation: 53
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
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