我有原创功能:
def getpingresults():
iplist = dict(load_devicefile())
cmd = "/usr/sbin/fping -C 3 -A -q {}".format(" ".join(map(str, iplist.keys())))
exitcode, out, results = get_fping_output(cmd)
pingresults = []
for aline in results.split("\n"):
print('Working on line: {0}'.format(aline))
if aline:
m = re.match(r"(\S+)\s+:\s(\S+)\s(\S+)\s(\S+)", aline)
ipaddress = m.group(1)
rtt = (float(m.group(2)) + float(m.group(3)) + float(m.group(4))) / 3
if rtt == '-':
iplist[ipaddress] += (float(9999),)
elif float(rtt) > 60:
iplist[ipaddress] += (float(rtt),)
else:
iplist[ipaddress] += (float(rtt),)
print(iplist)
return iplist
我需要编辑这个东西,以确保在任何这些m.group(2-4)变量中包含符号( - )。如果是 - 它应该(浮动(9999))。
所以,要在m.group(2)) + float(m.group(3)) + float(m.group(4)))
进行搜索,我试图这样做:
for rtt in m.group(range(2,5)):
if rtt == '-':
iplist[ipaddress] += (float(9999),)
elif float(rtt) > 60:
iplist[ipaddress] += (float(rtt),)
else:
iplist[ipaddress] += (float(rtt),)
但我在for rtt in m.group(range(2,5)):
File "MassPing_mod.py", line 61, in getpingresults
for rtt in m.group(range(2,5)):
IndexError:没有这样的组
如何使循环匹配三个m.groups(2-4)
答案 0 :(得分:0)
你的语法是无稽之谈。您正在尝试使用生成器调用期望数字的group
。而是在外面使用发电机并从中拉出。
for rtt in (m.group(i) for i in range(2,5)):
虽然如果我可以推荐一些不同的东西,可以考虑在m.groups
上使用元组splat-unpacking来使它更漂亮。
m = re.match(r"(\S+)\s+:\s(\S+)\s(\S+)\s(\S+)", aline)
ipaddress, *rtts = m.groups()
for rtt in rtts:
# etc...