使用Netmiko从Cisco WLC CLI提取用户数据时,字典结构化处理出现字段混乱问题求助
Netmiko从Cisco WLC CLI提取用户数据时,字典结构化处理出现字段混乱问题求助
大家好,我现在遇到个棘手的问题:因为Cisco无线LAN控制器没有API支持,我只能用Python通过CLI连接来拉取数据。但Cisco WLC的CLI输出结构实在太不规整了,而且我目前只有Win10的实验环境,暂时没法用Ansible来简化处理。
我要拉取的是show netuser summary命令的输出,这个命令会列出所有在线用户的信息,表头包含Username、AP Name、WLAN ID、WLAN Name、Lifetime、Description这些字段,但部分字段(比如WLAN Name或者Description)里的空格经常导致拆分出错。
我用Netmiko库写了一段代码来拉取并结构化数据,想把输出转成字典格式方便后续操作,但结果不如人意,代码如下:
from netmiko import ConnectHandler from netmiko import ConnectHandler, exceptions import re device= { 'device_type': 'cisco_wlc_ssh', 'ip': 'redacted', 'username': 'redacted', 'password': 'redacted', 'port' : 22, "session_log":r'D:\Python Projects\Netmiko\WifiCLI\Netmiko_session_GNR_log', "session_log_file_mode": "append" } try: connect = ConnectHandler(**device) show_netuser_sum = connect.send_command("show netuser summary", expect_string=f'y/n') show_netuser_sum += connect.send_command_timing("y") show_netuser_sum = show_netuser_sum.strip().split("\n") except (exceptions.ReadTimeout) as e: connect = ConnectHandler(**device) show_netuser_sum = connect.send_command("show netuser summary") show_netuser_sum = show_netuser_sum.strip().split("\n") header_line = show_netuser_sum[3] data_lines = show_netuser_sum[5:] headers = re.split(r'\s{2,}', header_line.strip()) # Extract data data = [] for line in data_lines: # Split the line based on multiple spaces split_line = re.split(r'\s{2,}', line.strip()) if len(split_line) > len(headers): split_line[1] = ' '.join(split_line[1:3]) split_line.pop(2) if len(split_line) > len(headers): split_line[3] = ' '.join(split_line[3:]) split_line = split_line[:len(headers)] if len(split_line) < len(headers): split_line.insert(3, '') row_data = dict(zip(headers, split_line)) data.append(row_data) # Print the structured data for row in data: print(row)
现在处理后的字典数据还是很乱,比如lifetime和description字段经常错位,我总共有13条用户记录,其中好几条(比如用户bcook的条目)都出现了这种字段对应错误的情况,有没有大佬能帮我看看问题出在哪?
备注:内容来源于stack exchange,提问作者karoks
相关产品推荐
相关产品推荐

