编辑功能以搜索循环



我获得了原始功能:

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(中的任何一个中都包含符号( - (。如果是 - 应该(float(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.Group(2-4(

您的语法是胡说八道。您正在尝试使用发电机来调用一个数字的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...

最新更新