通过 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的阅读代码。