Функция Python для тестирования ping
Я пытаюсь создать функцию, которую я могу вызвать по времени, чтобы проверить хороший пинг и вернуть результат, чтобы я мог обновить экранный экран. Я новичок в python, поэтому я не совсем понимаю, как вернуть значение или установить переменную в функции.
Вот мой код, который работает:
import os
hostname = "google.com"
response = os.system("ping -c 1 " + hostname)
if response == 0:
pingstatus = "Network Active"
else:
pingstatus = "Network Error"
Вот моя попытка создания функции:
def check_ping():
hostname = "google.com"
response = os.system("ping -c 1 " + hostname)
# and then check the response...
if response == 0:
pingstatus = "Network Active"
else:
pingstatus = "Network Error"
И вот как я показываю pingstatus
:
label = font_status.render("%s" % pingstatus, 1, (0,0,0))
Итак, я ищу, как вернуть pingstatus из функции. Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Похоже, вам нужно < return
ключевое слово
def check_ping():
hostname = "taylor"
response = os.system("ping -c 1 " + hostname)
# and then check the response...
if response == 0:
pingstatus = "Network Active"
else:
pingstatus = "Network Error"
return pingstatus
Вам нужно захватить/'получить' возвращаемое значение функции (pingstatus) в переменной с чем-то вроде:
pingstatus = check_ping()
Некоторая информация о функциях python:
http://www.tutorialspoint.com/python/python_functions.htm
http://www.learnpython.org/en/Functions
Вероятно, стоит пройти хороший вводный учебник для Python, который охватит все основы. Я рекомендую исследовать Udacity.com и codeacademy.com
Ответ 2
Вот упрощенная функция, которая возвращает логическое значение и не выводит вывод в stdout:
import subprocess, platform
def pingOk(sHost):
try:
output = subprocess.check_output("ping -{} 1 {}".format('n' if platform.system().lower()=="windows" else 'c', sHost), shell=True)
except Exception, e:
return False
return True
Ответ 3
Добавляя к этим двум ответам, вы можете проверить ОС и решить, следует ли использовать "-c" или "-n":
import os, platform
host = "8.8.8.8"
os.system("ping " + ("-n 1 " if platform.system().lower()=="windows" else "-c 1 ") + host)
Это будет работать в Windows, OS X и Linux
Вы также можете использовать sys
:
import os, sys
host = "8.8.8.8"
os.system("ping " + ("-n 1 " if sys.platform().lower()=="win32" else "-c 1 ") + host)
Ответ 4
Попробуй это
def ping(server='example.com', count=1, wait_sec=1):
"""
:rtype: dict or None
"""
cmd = "ping -c {} -W {} {}".format(count, wait_sec, server).split(' ')
try:
output = subprocess.check_output(cmd).decode().strip()
lines = output.split("\n")
total = lines[-2].split(',')[3].split()[1]
loss = lines[-2].split(',')[2].split()[0]
timing = lines[-1].split()[3].split('/')
return {
'type': 'rtt',
'min': timing[0],
'avg': timing[1],
'max': timing[2],
'mdev': timing[3],
'total': total,
'loss': loss,
}
except Exception as e:
print(e)
return None
Ответ 5
Не является частью вопроса ОП, но в случае, если это полезно для других:
Если вы используете Windows, вам нужно немного изменить команду ping:
response = os.system("ping -n 1" + hostname + "> nul")