2017-02-16 60 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