Netmiko send_config_set() 中的进度条

Progress bar in Netmiko's send_config_set()

我想在 send_config_set(rendered_template,cmd_verify=False)[=24 上的 Python 脚本中添加进度条=]. rendered_template 是动态生成的,因此它的大小可能会有所不同,但不会。的命令也可以改变。 如何添加进度条以便显示 send_config_set() 命令的进度。 下面是我试过的代码

animation = "|/-\"            
for i in range(nlines):
    device_handler.send_config_set(rendered_template,cmd_verify=False)
    time.sleep(0.1)
    sys.stdout.write("\r" + animation[i % len(animation)])
    sys.stdout.flush()
print ("End!")

先执行命令不显示进度条,执行命令后显示进度条

寻求帮助!!

谢谢!

我认为你应该在循环结束后发送 sys.stdout.write("]\n") 来结束刷新。

animation = "|/-\"            
for i in range(nlines):
    device_handler.send_config_set(rendered_template,cmd_verify=False)
    time.sleep(0.1)
    sys.stdout.write("\r" + animation[i % len(animation)])
    sys.stdout.flush()
sys.stdout.write("]\n")  # this ends the progress bar
print ("End!")

这个 answer 应该完全符合您的情况。

您代码中的进度条并不是真正的进度条,因为命令是通过 send_config_set() 发送的,应该先完成,然后执行 sys.stdout.write("\r" + animation[i % len(animation)])。此外,使用 send_config_set 多次发送命令 (基于 nlines 值) 因为它在 “for 循环”[=43] 中=]!您可以使用 send_commandsend_command_timing.

一一发送命令

请查看 tqdm,它是 Python 的可扩展进度条库,非常有用。

使用tqdm 非常简单。使用 tqdm 和 Netmiko 的完整演示:

from netmiko import ConnectHandler
from tqdm import tqdm

device = {
    "device_type": "cisco_ios",
    "ip": "",
    "username": "",
    "password": "",
    "session_log": "whatever.log",
}

rendered_template = ["show ip interface brief", "show running-config", "show inventory"]
nlines = len(rendered_template)

with ConnectHandler(**device) as net_connect:
    for i in tqdm(range(nlines), unit="command", desc="show commands"):
        output = net_connect.send_command_timing(rendered_template[i], cmd_verify=False)
print("Done!")

或者如果 output 不需要返回,则使用列表理解。

with ConnectHandler(**device) as net_connect:
    # List comprehension
    [
        net_connect.send_command_timing(rendered_template[i], cmd_verify=False)
        for i in tqdm(range(nlines), unit="command", desc="show commands")
    ]

输出

show commands: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:12<00:00,  4.26s/command]
Done!