You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3+Netmiko从F5设备输出提取最后一行数字值?

解决F5设备slot-id最后数字提取问题

问题分析

你当前代码的问题在于:每次匹配到含slot-id的行时,只是临时创建单元素列表k,没有持续收集所有slot-id数字,因此无法获取最后一个值;另外直接取行尾字符[-1]的方式不够稳妥,若数字是多位数(比如10)会直接出错,应该用正则精准提取数字。

修改方案

  1. 初始化一个列表,用来存储所有提取到的slot-id数字
  2. 用正则表达式匹配行中的数字,替代直接取行尾字符的操作
  3. 遍历完所有行后,取列表最后一个元素存入slotnum变量

修改后的完整代码片段

import re
from netmiko import Netmiko
from multiprocessing.dummy import Pool as ThreadPool
import time

f_2 = open("f5ips.txt","r") 
multiple_device_list = f_2.readlines()

def _slot_(nodeip):
    try:
        switch = {
            'device_type': 'f5_ltm', 'ip': nodeip.strip(), 'username':
            'user', 'password':"pass", "conn_timeout": 2}
        switch_connect = Netmiko(**switch)
        print(nodeip.strip() + " " + "is reachable")
        prompt_sw_axa = switch_connect.find_prompt()
        slice1 = (prompt_sw_axa.split(')')[0])
        slice2 = [slice1.split("(")[1]]
        name = [(slice2[0])]
        print(name)
        
    except Exception as e:
        print(e)
        # 修复原代码中无效的写入语句,实际记录不可达IP
        with open("unreachable_f5.txt", "a") as f:
            f.write(nodeip.strip() + "\n")
        return

    output = switch_connect.send_command("show sys cluster field-fmt")    
    print(name[0]) 
    LINES = output.split("\n")
    
    # 初始化列表存储所有slot-id数字
    slot_ids = []

    for l1 in LINES:
        # 正则匹配slot-id后的数字,兼容多位数
        match = re.search(r'slot-id\s+(\d+)', l1)
        if match:
            slot_num = match.group(1)
            slot_ids.append(slot_num)
            print(f"提取到slot-id: {slot_num}")
    
    # 获取最后一个slot-id数字并存储
    if slot_ids:
        slotnum = slot_ids[-1]
        print(f"[{name[0]}] 最后一个slot-id数字: {slotnum}")
        # 这里可根据需求对slotnum做后续处理,比如写入结果文件
    else:
        print(f"[{name[0]}] 未找到slot-id记录")
        
    switch_connect.disconnect() 

myPool = ThreadPool(100)
myPool.map(_slot_, multiple_device_list)
myPool.close()
myPool.join()

关键改动说明

  • 新增slot_ids列表,持续收集所有匹配到的slot-id数字,避免临时变量覆盖
  • 使用正则r'slot-id\s+(\d+)'精准提取数字:\s+匹配任意空格,(\d+)捕获一个或多个数字,解决了行尾字符无法处理多位数的问题
  • 遍历结束后通过slot_ids[-1]获取最后一个元素,同时增加非空判断防止索引错误
  • 修复原代码中异常处理里无效的文件写入语句,改为实际记录不可达IP
  • 补充线程池的map、close、join操作,确保多线程任务正常执行

内容的提问来源于stack exchange,提问作者harry838383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:05:17