Python ping循环脚本在windows上运行,错误

时间:2015-03-03 18:19:28

标签: python windows loops ping continuous

我正在尝试编写一个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!")

2 个答案:

答案 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)