2017-02-16 3 views
1

Это мой код для проверки состояния, связанного с хостом, я просто хочу распечатать статус (вверх/вниз) и избежать всего процесса pinging, отображаемого на терминале.Упростите и уменьшите нежелательный вывод, отображаемый

import os 
hostname = "google.com" 
response = os.system("ping -c 1" + hostname) 

if response == 0: 
    print hostname, 'up' 
else: 
    print hostname, 'down' 
+0

Есть несколько продуктов, доступных как https://pypi.python.org/pypi/python-ping/, что используйте ICMP. Я не пробовал никого из них. Они требуют, чтобы у вас был статус root в nix или был администратором Windows. –

+0

Я думаю, что использование библиотеки ping ping (упомянутой Билл Белл) является лучшим вариантом. Если вы настаиваете на использовании os.system, попробуйте перенаправить вывод (например,>/dev/null), чтобы скрыть его: 'response = os.system (" ping -c 1 {}>/dev/null 2>/dev/null ".format (имя хоста))' –

+0

bingo ... работал ... спасибо мужчине ... !!! – user7576454

ответ

0
import subprocess 
import re 
hostname = "google.com" 

with subprocess.Popen(["ping", "-c 1", "-t 3", hostname], stdout=subprocess.PIPE) as proc: 
    match = re.findall(r'1 packets received', proc.stdout.read().decode()) 
    if match: 
    print(hostname + ' is up') 
    else: 
    print(hostname + ' is down') 

результат:

google.com is up 

Для питона 2.7:

test = subprocess.Popen(["ping", "-c 1", "-t 3", hostname],stdout=subprocess.PIPE) 
match = re.findall(r'1 packets received', test.communicate()[0]) 
if match: 
    print(hostname + ' is up') 
else: 
    print(hostname + ' is down') 
+0

спасибо большое ... !!! – user7576454

+0

получение этой ошибки "с подпроцессом.Popen ([" ping "," -c 1 "," -t 3 ", hostname], stdout = subprocess.PIPE) как proc: AttributeError: __exit__" – user7576454

+0

@ user7576454 Без полного traceback ... все, что я могу, это то, что это рабочий код. У старых версий python есть некоторые проблемы с подпроцессом, проверьте, какая версия python включена. – gregory

0

Привет, я сделал одно подобное. Я позабочусь об этом позже, чтобы отправить электронное письмо.

Я держу вас в курсе. С уважением,

импорт OS имя хоста = "google.com"

если os.name == 'нт' или os.name == 'NT': ответ = os.system ("пинг - N 1 "+ имя хоста) остальное: ответ = os.system (" пинг -c 1 "+ имя хоста)

если ответ == 0: печати (имя хоста, 'вверх') остальное: печати (hostname, 'down') '' 'добавить опцию для отправки электронной почты, если ping fail' '

+0

спасибо большое ... !!! – user7576454

+0

это работает для вас? – peacengell

Смежные вопросы