我正在使用: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地址,无论有效与否,它都表示已经过了。
答案 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