我正在尝试编写一个python脚本,您输入几个ips并连续ping它们,然后输出结果。我想让它循环通过ips并继续前进直到停止但是我不能让它发生。输出if语句也总是返回false。劝告/帮助?
import os
import subprocess
print ("PingKeep will run a Ping request every 5 seconds on a round of IP's until told to stop (using ctrl+c)." )
ips=[]
n=int(input("How many IP's are we checking: "))
for i in range(1,n+1):
x=str(input("Enter IP number "+str(i)+": "))
ips.append(x)
for ping in range(0,n):
ipd=ips[ping]
res = subprocess.call(['ping', '-n', '3', ipd])
if ipd in str(res):
print ("ping to", ipd, "OK")
elif "failure" in str(res):
print ("ping to", ipd, "recieved no responce")
else:
print ("ping to", ipd, "failed!")
答案 0 :(得分:0)
首先,你的缩进都搞砸了,请修好。
其次,为什么每次使用-n 3
ping 3次?如果前两次ping失败,但第三次返回正常,它仍然算作成功,只是一个FYI。
第三,您只是循环输入的IP,而不是无限循环。我推荐这样的东西:
while True:
这将永远循环。您可以将循环放在该循环中以循环IP。
第四,什么输出语句返回false?我没有看到类似的东西。此外,您的失败测试是完全错误的。如果ping超时,ping可执行文件将返回1的返回码,但不会输出任何“失败”。 res
只会是0或1,绝不是字符串。
第五,在你努力尝试之后再尝试写下这个问题,并提供我给你的见解。
答案 1 :(得分:0)
在代码结束时不确定你想要做什么,但如果你在ping失败时遇到CalleddProcessError
,你就会知道ping失败的时候,不能完全确定你想要如何结束程序,以便我会留给你:
from subprocess import check_call, CalledProcessError,PIPE
print("PingKeep will run a Ping request every 5 seconds on a round of IP's until told to stop (using ctrl+c).")
import time
n = int(input("How many IP's are we checking: "))
ips = [input("Enter IP number {}: ".format(i)) for i in range(1, n + 1)]
while True:
for ip in ips:
try:
out = check_call(['ping', '-n', '3', ip],stdout=PIPE)
except CalledProcessError as e:
# non zero return code will bring us here
print("Ping to {} unsuccessful".format(ip))
continue
# if we are here ping was successful
print("Ping to {} ok".format(ip))
time.sleep(5)