這是我的代碼來檢查與主機相關的狀態,我只是想打印狀態(上/下),並避免在終端上顯示整個ping程序。簡化和減少不必要的輸出顯示
import os
hostname = "google.com"
response = os.system("ping -c 1" + hostname)
if response == 0:
print hostname, 'up'
else:
print hostname, 'down'
這是我的代碼來檢查與主機相關的狀態,我只是想打印狀態(上/下),並避免在終端上顯示整個ping程序。簡化和減少不必要的輸出顯示
import os
hostname = "google.com"
response = os.system("ping -c 1" + hostname)
if response == 0:
print hostname, 'up'
else:
print hostname, 'down'
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')
非常感謝... !!! – user7576454
獲取此錯誤「與子進程.Popen([」ping「,」-c 1「,」-t 3「,主機名稱,stdout = subprocess.PIPE)爲proc: AttributeError:__exit__」 – user7576454
@ user7576454沒有滿追蹤......我只能說這是工作代碼。舊版本的python在子流程中確實存在一些問題,請檢查您所使用的python版本。 – gregory
你好我做了一個這樣的。 稍後我會定製這個發送電子郵件。
我隨時爲你發佈。 問候,
進口OS 主機名= 「google.com」
如果os.name == 'NT' 或os.name == 'NT': 響應=使用os.system(「平 - N + 1 「+主機名) 否則: 響應=使用os.system(」 平-c 1「+主機名)
如果響應== 0: 打印(主機名, '向上') 否則: 打印(主機名,'down') '''做添加選項發送電子郵件,如果ping失敗''
非常感謝... !!! – user7576454
爲您做這個工作? – peacengell
有一個可用的類似https://pypi.python.org/pypi/python-ping/那對夫婦的產品使用ICMP。我沒有嘗試過任何一個。他們要求您在'nix'上擁有root用戶身份,或者在Windows上成爲管理員。 –
我認爲使用python ping庫(比爾貝爾提到)是最好的選擇。如果你堅持使用os.system,試着重定向你的輸出(例如>/dev/null)來隱藏它:'response = os.system(「ping -c 1 {}>/dev/null 2>/dev/null 「.format(hostname))' –
賓果...工作...感謝的人... !!! – user7576454