1

Windows での ping テストの結果を印刷しようとしています。ただし、Web サイトがタイムアウトすると、次のエラーが発生します。

IndexError: リスト インデックスが範囲外です。

明らかに、結果を探していますが、タイムアウトしたときに「Web サイトが利用できません」と表示するにはどうすればよいですか?

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"
4

1 に答える 1

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"
于 2013-07-19T23:58:54.130 に答える