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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:16:08