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_command
或 send_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!
我想在 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_command
或 send_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!