python问题ping

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 也许有你想要的答案,你可以看看