内特米科send_config_set()中的进度条



我想在send_config_set(rendered_template,cmd_verify=False)的 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!")

这个答案应该完全适合你的情况。

代码中的进度条并不是真正的进度条,因为命令是通过应首先完成的send_config_set()发送的,然后执行sys.stdout.write("r" + animation[i % len(animation)])。此外,使用send_config_set会多次发送命令(基于nlines值),因为它位于"for 循环">中!您可以使用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!

更新 八月 17th, 2023

Netmiko==4.2.0 和 TQDM==4.66.1

rendered_template = ["show ip interface brief", "show running-config", "show inventory"]
with ConnectHandler(**device) as net_connect:
for command in tqdm(iterable=rendered_template, unit="command", desc="show commands"):
output = net_connect.send_command(command, cmd_verify=False, read_timeout=60)
print("Done!")
show commands: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [01:10<00:00,  3.53s/command

相关内容

  • 没有找到相关文章

最新更新