Python 3.x 用python从ping结果中提取丢包数据

Python 3.x 用python从ping结果中提取丢包数据,python-3.x,subprocess,ping,Python 3.x,Subprocess,Ping,我正在尝试从ping统计中获取packetloss数据。到目前为止,我有一整块ping统计数据。如果packetloss

我正在尝试从ping统计中获取packetloss数据。到目前为止,我有一整块ping统计数据。如果packetloss<10%,我只需要packetloss数据就可以执行
:在python代码中执行一些操作。这是我的密码:

import subprocess
from subprocess import Popen, PIPE

hostname = "8.8.8.8"
process = subprocess.Popen(['ping','-c','5',hostname],
stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
print(stdout)
样本数据:

$ ping -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=7.250 ms
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
64 bytes from 8.8.8.8: icmp_seq=3 ttl=59 time=19.661 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 2 packets received, 60.0% packet loss
round-trip min/avg/max/stddev = 7.250/13.456/19.661/6.205 ms
请尝试以下操作:

packetloss = float([x for x in stdout.decode('utf-8').split('\n') if x.find('packet loss') != -1][0].split('%')[0].split(' ')[-1])
if loss < 10.0:
    print("Loss is %s percent" % packetloss)
packetloss=float([x代表stdout.decode('utf-8')。如果x.find('packetloss')!=-1][0,则拆分('\n'))。拆分('%')[0]。拆分('')[-1])
如果损失小于10.0:
打印(“损失为%s”%packetloss)

它的工作原理很有魅力。我可以知道我应该读哪一个主题才能在将来解码吗?提前谢谢!很高兴听到它为您的用例工作。您可能应该查看字符串操作(decode、split、find)和列表理解扫描我也这样做,以查找平均往返时间,在上述情况下为13.456?类似于avg_time=float([x代表x在stdout.decode('utf-8')。如果x.startswith('round-trip')][0]。split('=')[-1]。split('/')[1])应该可以工作