python通过调用ping命令,判断liansuodian列表内局域网ip地址是否通,如果通的话,获取延时信息、丢包信息、平均延时等相关返回信息,并通过判断延时时间,延时时间超过10秒预警,将预警信息取出负给一个列表取值。不通的话取不通的ip地址,将不通地址付给一个列表。每隔10分钟自动循环执行一次。
我现在写的,如果多个不通的话,只有第一个会提取ip地址,随后就跳出循环了,请问怎样写才可以达到我上边提出的需求。请指点 谢谢,感激不尽
# *--coding=utf-8--*
import os
import subprocess
import re
import content as content
from pythonping import ping
liansuodian = ['193.168.46.254','193.168.46.115','193.168.13.254','193.168.16.254','172.16.10.44']
for i in liansuodian:
command = os.popen("ping -n 1 " + i)
pin = command.read()
# print(pin)
if "请求超时" in pin:
p = i
print(p)
# print("NO")
else:
bytime = re.findall(r'时间=(\w)', pin, re.M)
print(bytime)
# *--coding=utf-8--*
import os
import subprocess
import re
import content as content
from pythonping import ping
liansuodian = ['193.168.46.254','193.168.46.115','193.168.13.254','193.168.16.254','172.16.10.44']
_listY = []
_listN = []
for i in liansuodian:
command = os.popen("ping -n 1 " + i)
pin = command.read()
# print(pin)
if "请求超时" in pin:
p = i
_listN.append(p)
diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)
print(p,diushi,'网络不通')
else:
p = i
_listY.append(p)
bytime = re.findall(r'时间=(\w)', pin, re.M)
diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)
print(p,bytime,diushi,'网络正常')
# print(diushi)
输出结果:
D:\Python\Python39\python.exe D:/project/Python/lianxi/01.py
193.168.46.254 ['3'] ['0'] 网络正常
193.168.46.115 ['1'] 网络不通
193.168.13.254 ['5'] ['0'] 网络正常
193.168.16.254 ['3'] ['0'] 网络正常
172.16.10.44 [] ['0'] 网络正常
ip列表里应该有2个是不通的ip,一个是193.168.46.115,一个是172.16.10.44。
193.168.46.115判断网络不通正常,但是172.16.10.44,却不知道为什么明明不通,却提示网络正常。请问究竟应该怎样修改啊?
修改代码如下:
import os,re
ping = lambda ip:''.join(os.popen("ping -n 1 "+ip).readlines())
liansuodian = ['193.168.46.254','193.168.46.115','193.168.13.254','193.168.16.254','172.16.10.44']
for ip in liansuodian:
print('='*30)
pin = ping(ip)
if "请求超时" in pin:
print('超时:',ip)
else:
bytime = re.findall(r'时间=(\w+)', pin, re.M)
print('命令: ping',ip)
print('时间:',bytime[0])
print('='*30)
输出结果:
==============================
超时: 193.168.46.254
==============================
命令: ping 193.168.46.115
时间: 342ms
==============================
超时: 193.168.13.254
==============================
超时: 193.168.16.254
==============================
超时: 172.16.10.44
==============================
你的问题是将不通地址付给保存下来,而你现在只能保存一个不同的地址,其他的保存不下来是吧?
因为你现在是p赋值给一个变量呀,每次赋值都会覆盖这个变量的值。
你用列表装起来呀
import os
import subprocess
import re
from pythonping import ping
liansuodian = ['193.168.46.254','193.168.46.115','193.168.13.254','193.168.16.254','172.16.10.44']
#创建一个列表
_list = []
for i in liansuodian:
command = os.popen("ping -n 1 " + i)
pin = command.read()
# print(pin)
if "请求超时" in pin:
p = i
#往列表里面添加值
_list.append(p)
print(p)
# print("NO")
else:
print('********',pin)
这篇文章:用Python实现PING 也许有你想要的答案,你可以看看