2013-07-19 66 views
1

我试图从Windows上的ping测试打印结果。但是,网站超时时出现以下错误:在Python中返回ping测试结果

IndexError:列表索引超出范围。

很明显,它正在寻找结果,但是如何在超时时表明“网站不可用”?

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" 
+0

你检查是否错误? –

回答

3

什么像

编辑:试试这个:

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" 
+1

获取相同的错误。 – Savvis

+0

这很奇怪,我跑了我的代码,它工作正常。你可以发布你的其余部分吗? ps:请注意,在你的代码片段中,“except”缩进太多了。 – seth

+0

它可以在网站可以ping的时候工作,否则downned网站产生这个错误:minimum = int(re.findall(r“Minimum =(\ d +)”,out)[0]) IndexError:列表索引超出范围 – Savvis