Python中的多个ping脚本

kui*_*per 18 python networking ping

我无法在python和网络上找到任何好的易学文档.在这个例子中,我只是想创建一个简单的脚本,我可以ping许多远程机器.

for ping in range(1,10):
   ip="127.0.0."+str(ping)
   os.system("ping -c 3 %s" % ip)
Run Code Online (Sandbox Code Playgroud)

像这样的简单脚本可以很好地ping机器,但是我想让脚本返回'active''没有响应'这让我觉得我也必须查找时间模块,我想time.sleep(5)和之后那会有一个休息声明.这让我觉得里面应该有一个while循环.我不是百分百肯定,我可能会完全朝着错误的方向前进:/如果有人可以提供帮助,或者指向一些非常棒的文档.

Rol*_*ith 26

试试subprocess.call.它保存了所使用程序的返回值.

根据我的ping手册,它在成功时返回0,在发送ping时返回2但没有收到回复而任何其他值表示错误.

# typo error in import
import subprocess

for ping in range(1,10):
    address = "127.0.0." + str(ping)
    res = subprocess.call(['ping', '-c', '3', address])
    if res == 0:
        print "ping to", address, "OK"
    elif res == 2:
        print "no response from", address
    else:
        print "ping to", address, "failed!"
Run Code Online (Sandbox Code Playgroud)

  • 你很欢迎.请记住标记答案,帮助您接受(点击问题投票标记下方的绿色标记),它向其他访客发出信号,答案是有帮助的.:-) (3认同)

hoc*_*chl 10

这个脚本:

import subprocess
import os
with open(os.devnull, "wb") as limbo:
        for n in xrange(1, 10):
                ip="192.168.0.{0}".format(n)
                result=subprocess.Popen(["ping", "-c", "1", "-n", "-W", "2", ip],
                        stdout=limbo, stderr=limbo).wait()
                if result:
                        print ip, "inactive"
                else:
                        print ip, "active"
Run Code Online (Sandbox Code Playgroud)

会产生类似这样的输出:

192.168.0.1 active
192.168.0.2 active
192.168.0.3 inactive
192.168.0.4 inactive
192.168.0.5 inactive
192.168.0.6 inactive
192.168.0.7 active
192.168.0.8 inactive
192.168.0.9 inactive
Run Code Online (Sandbox Code Playgroud)

如果更换您可以捕获输出limbosubprocess.PIPE和使用communicate()上的Popen对象:

p=Popen( ... )
output=p.communicate()
result=p.wait()
Run Code Online (Sandbox Code Playgroud)

这样您就可以获得命令的返回值并捕获文本.如果您需要灵活性,请遵循本手册,这是操作子流程的首选方法:

此模块中的基础流程创建和管理由Popen类处理.它提供了很大的灵活性,因此开发人员能够处理便利功能未涵盖的不太常见的情况.


小智 5

非常感谢你做的这些.我已将其修改为与Windows一起使用.我也设置了一个低超时,所以没有返回的IP将不会等待5秒钟.这是来自hochl源代码.

import subprocess
import os
with open(os.devnull, "wb") as limbo:
        for n in xrange(200, 240):
                ip="10.2.7.{0}".format(n)
                result=subprocess.Popen(["ping", "-n", "1", "-w", "200", ip],
                        stdout=limbo, stderr=limbo).wait()
                if result:
                        print ip, "inactive"
                else:
                        print ip, "active"
Run Code Online (Sandbox Code Playgroud)

只需更改您的方案的ip =和主机的xrange.