Пинг в Python с обратной связью

Так что я такой нуб в Python, это больно, но я пытаюсь найти способ ПИНГ сайта, а затем выплюнуть предложение "если / еще".

Пока у меня есть это:

import subprocess 
command = "ping -c 3 www.google.com"  # the shell command
process = subprocess.Popen(command, stdout=subprocess.PIPE,     
stderr=None, shell=True)

#Launch the shell command:
output = process.communicate()

print output[0]

Ниже я ошибаюсь, вот вторая часть:

if output == 0.00
print "server is good"

else
print "server is hosed"

Очевидно, что часть 2 не работает.

У меня вопрос, как мне "прочитать" результаты пинга (миллисекунды) icmp_seq=0 ttl=44 время =13,384 мс

и сказать "если время пинга быстрее, чем 12.000 мс, тогда сделай ЭТО", иначе "сделай ЭТО"

Прямо сейчас я просто делаю печать, но скоро я бы хотел изменить это на что-то другое.

1 ответ

subprocess.Popen обычно не тот, который вы хотите. Есть удобные функции для всех простых задач. В твоем случае, я думаю, ты хочешь subprocess.check_output:

output = subprocess.check_output(command, shell=True)

Есть много способов проанализировать полученную выходную строку. Я люблю регулярные выражения:

matches = re.findall(" time=([\d.]+) ms", output)

re.findall возвращает list из str, но вы хотите преобразовать это в одно число, чтобы вы могли делать численные сравнения. Использовать float() конструктор для преобразования strс floats, а затем вычислите среднее значение:

matches = [float(match) for match in matches]
ms = sum(matches)/len(matches)

Пример программы:

import subprocess
import re

# Run the "ping" command
command = "ping -c 3 www.google.com"  # the shell command
output = subprocess.check_output(command, shell=True)

# And interpret the output
matches = re.findall(" time=([\d.]+) ms", output)
matches = [float(match) for match in matches]
ms = sum(matches)/len(matches)

if ms < 12:
     print "Yay"
else:
     print "Boo"

Обратите внимание, что выход ping не стандартизирован. На моей машине под управлением Ubuntu 14.04 вышеприведенное регулярное выражение работает. На вашей машине, на которой запущена какая-то другая ОС, может потребоваться другое.

Другие вопросы по тегам