Netmiko配置Cisco交换机时tqdm进度条跳变,求渐进式进度方案
解决Netmiko配置交换机时进度条渐进显示的问题
你的问题根源是当前tqdm只把每台设备作为一个进度单元,3台设备自然只会分3步更新进度。要实现配置过程中的渐进增长,需要把每条配置命令作为进度跟踪的最小单元,或是自定义进度更新逻辑。下面是几种可行方案:
方案1:嵌套tqdm跟踪单设备的每条命令进度
外层进度条跟踪总设备数量,内层进度条跟踪当前设备的每条配置命令执行情况,每完成一条命令就更新进度:
from netmiko import ConnectHandler from tqdm import tqdm # 读取配置文件 with open('IOS_config') as f: config_lines = f.read().splitlines() all_devices = [S1, S2, S3] # 外层:总设备进度 for device in tqdm(all_devices, desc="总配置进度"): print(f"\n正在配置设备 {device['ip']}") # 建立设备连接 net_connect = ConnectHandler(**device) net_connect.enable() # 若需进入特权模式,添加此步骤 # 内层:当前设备的命令执行进度,leave=False避免残留进度条 for cmd in tqdm(config_lines, desc=f"{device['ip']} 命令进度", leave=False): net_connect.send_config_set(cmd) # 断开连接 net_connect.disconnect()
方案2:全局统一进度条,跟踪所有命令的执行
用一个统一进度条显示整体配置进度,把所有设备的命令总数作为总进度步数,每完成一条命令就更新一次进度:
from netmiko import ConnectHandler from tqdm import tqdm with open('IOS_config') as f: config_lines = f.read().splitlines() all_devices = [S1, S2, S3] # 计算总进度步数:设备数 × 单设备命令数 total_steps = len(all_devices) * len(config_lines) with tqdm(total=total_steps, desc="整体配置进度") as global_pbar: for device in all_devices: print(f"\n处理设备 {device['ip']}") net_connect = ConnectHandler(**device) net_connect.enable() for cmd in config_lines: net_connect.send_config_set(cmd) global_pbar.update(1) # 每完成一条命令,进度+1 net_connect.disconnect()
方案3:无需tqdm,自定义文本进度显示
如果不想依赖tqdm库,可以自己实现简单的百分比进度显示,用换行符覆盖当前行来实时更新:
from netmiko import ConnectHandler with open('IOS_config') as f: config_lines = f.read().splitlines() all_devices = [S1, S2, S3] total_tasks = len(all_devices) * len(config_lines) completed_tasks = 0 for device in all_devices: print(f"\n正在配置设备 {device['ip']}") net_connect = ConnectHandler(**device) net_connect.enable() for cmd in config_lines: net_connect.send_config_set(cmd) completed_tasks += 1 # 计算并打印当前进度,\r覆盖当前行 progress = (completed_tasks / total_tasks) * 100 print(f"\r当前整体进度: {progress:.1f}%", end="") net_connect.disconnect() print("\n所有设备配置完成!")
内容的提问来源于stack exchange,提问作者Ahmed A
相关产品推荐
相关产品推荐

