Пинг в 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
с float
s, а затем вычислите среднее значение:
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 вышеприведенное регулярное выражение работает. На вашей машине, на которой запущена какая-то другая ОС, может потребоваться другое.