在编写IP地址时在Python中创建简单的if语句

时间:2016-07-04 19:14:35

标签: python ip ping

我正在使用:Windows我试图在ping ip地址时创建一个简单的if语句

import os
hostname = "192.168.8.8." #example
response = os.system("ping -c 1 " + hostname)

#and then check the response...
if response == 0:
    print hostname, 'is down'

else:
  print hostname, 'is up'

print response

我对此非常陌生,但无论我输入的是什么IP地址,无论有效与否,它都表示已经过了。

3 个答案:

答案 0 :(得分:1)

os.system()返回进程退出值。 0表示成功。

在你的情况下,它正在成功执行,因此它返回0.你所要做的就是从ping命令获得完整的输出,然后进行字符串比较以找出该IP是否存活。

您需要使用subprocess's checkoutput method

import subprocess

hostname = "google.com"
batcmd="ping -n 1 " + hostname
result = subprocess.check_output(batcmd, shell=True)
if "Received = 1" in result:
    print "Is UP"
else:
    print "Is Down"

答案 1 :(得分:0)

使用我的回答here的变体删除界面参数subprocess.check_call

from subprocess import check_call, CalledProcessError, PIPE

def is_reachable(i, add):
    command = ["ping", "-c", i, add]
    try:
        check_call(command,sdout=PIPE)
        return True
    except CalledProcessError as e:
        return False

if is_reachable("3", "127.0.0.01"):
 # host is reachable
else:
     # not reachable

在Windows上,您可能需要添加参数"-w", "2999"以获取针对无法访问的主机的错误级别返回0以外的内容,因为即使对于不成功的调用,返回代码也将为零,windows-7-get-no-reply-but-sets-errorlevel-to-0

你也可以使用 check_output ,具体检查输出中是否有Destination host unreachable

 return "Destination host unreachable" in check_output(command)

答案 2 :(得分:0)

你做的一切都没问题,唯一的问题就是你把输出错误的正确输出混淆了,输出错误就是0。

import os
hostname = "192.168.8.8." #example
response = os.system("ping -c 1 " + hostname)

#and then check the response...
if response == 0:
    print hostname, 'is up'

else:
  print hostname, 'is down'

print response