通过 Paramiko 在 Cisco 交换机上执行多个命令 - 提高性能
Execute several commands on Cisco switch via Paramiko - improve performance
我正在尝试登录 cisco 交换机并在那里做一些事情(例如配置端口)。我显然不能在 cisco 设备上使用 exec_command(cmd1 \n cmd2 \n)
...所以我正在使用一个通道来发送我的命令,如下所示:
channel = ssh.invoke_shell()
channel.send("show arp\n")
while not channel.recv_ready():
time.sleep(0.5)
out = channel.recv(9999)
我不喜欢 time.sleep(0.5)
并且想要一些动态等待命令执行的东西,因为有时命令花费的时间甚至超过 0.5 秒,这会大大减慢一切。例如 exec_command(cmd)
我有 exit_status = channel.recv_exit_status()
。
有办法解决这个问题吗?
编辑:
我能以某种方式收听频道并等待输出像
CISCOSWITCH#
以便我知道我已准备好发送更多命令或 exit
?
一般来说,您应该为此使用 "exec" 频道。 "shell" 通道不应用于自动执行命令。
但据我所知,您的服务器不支持 "exec" 通道的多个命令。 我已经为其他读者添加了以上评论,而不是尝试使用此解决方案,除非他们确实必须这样做。
如果必须使用 "shell" 渠道,则必须使用 shell 技巧。
因此在您的特定情况下,您可能希望在命令完成后让远程 shell 打印一些唯一的字符串:
channel.send("show arp\necho Command-has-finished\n")
然后你继续阅读输出,直到找到一行 "Command-has-finished"
.
检查来自JSch Exec.java
example的阅读代码。
我正在尝试登录 cisco 交换机并在那里做一些事情(例如配置端口)。我显然不能在 cisco 设备上使用 exec_command(cmd1 \n cmd2 \n)
...所以我正在使用一个通道来发送我的命令,如下所示:
channel = ssh.invoke_shell()
channel.send("show arp\n")
while not channel.recv_ready():
time.sleep(0.5)
out = channel.recv(9999)
我不喜欢 time.sleep(0.5)
并且想要一些动态等待命令执行的东西,因为有时命令花费的时间甚至超过 0.5 秒,这会大大减慢一切。例如 exec_command(cmd)
我有 exit_status = channel.recv_exit_status()
。
有办法解决这个问题吗?
编辑:
我能以某种方式收听频道并等待输出像
CISCOSWITCH#
以便我知道我已准备好发送更多命令或 exit
?
一般来说,您应该为此使用 "exec" 频道。 "shell" 通道不应用于自动执行命令。
但据我所知,您的服务器不支持 "exec" 通道的多个命令。 我已经为其他读者添加了以上评论,而不是尝试使用此解决方案,除非他们确实必须这样做。
如果必须使用 "shell" 渠道,则必须使用 shell 技巧。
因此在您的特定情况下,您可能希望在命令完成后让远程 shell 打印一些唯一的字符串:
channel.send("show arp\necho Command-has-finished\n")
然后你继续阅读输出,直到找到一行 "Command-has-finished"
.
检查来自JSch Exec.java
example的阅读代码。