2017-02-16 48 views
1

這是我的代碼來檢查與主機相關的狀態,我只是想打印狀態(上/下),並避免在終端上顯示整個ping程序。簡化和減少不必要的輸出顯示

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。我沒有嘗試過任何一個。他們要求您在'nix'上擁有root用戶身份,或者在Windows上成爲管理員。 –

+0

我認爲使用python ping庫(比爾貝爾提到)是最好的選擇。如果你堅持使用os.system,試着重定向你的輸出(例如>/dev/null)來隱藏它:'response = os.system(「ping -c 1 {}>/dev/null 2>/dev/null 「.format(hostname))' –

+0

賓果...工作...感謝的人... !!! – 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 

對於Python 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「,主機名稱,stdout = subprocess.PIPE)爲proc: AttributeError:__exit__」 – user7576454

+0

@ user7576454沒有滿追蹤......我只能說這是工作代碼。舊版本的python在子流程中確實存在一些問題,請檢查您所使用的python版本。 – gregory

0

你好我做了一個這樣的。 稍後我會定製這個發送電子郵件。

我隨時爲你發佈。 問候,

進口OS 主機名= 「google.com」

如果os.name == 'NT' 或os.name == 'NT': 響應=使用os.system(「平 - N + 1 「+主機名) 否則: 響應=使用os.system(」 平-c 1「+主機名)

如果響應== 0: 打印(主機名, '向上') 否則: 打印(主機名,'down') '''做添加選項發送電子郵件,如果ping失敗''

+0

非常感謝... !!! – user7576454

+0

爲您做這個工作? – peacengell