通过Paramiko在Cisco交换机上执行多个命令 - 提高性能

时间:2018-04-25 06:37:23

标签: python-2.7 ssh paramiko cisco

我尝试登录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

1 个答案:

答案 0 :(得分:0)

一般来说,你应该使用" exec"这个渠道。 " shell" channel不应该用于自动执行命令。

但是我知道你的服务器不支持使用" exec"渠道。 我已经为其他读者添加了上述评论,而不是尝试使用此解决方案,除非他们确实需要。

如果你必须使用" shell"通道,你必须使用shell技术。

因此,在您的特定情况下,您可能希望在命令完成后让远程shell打印一些唯一的字符串:

channel.send("show arp\necho Command-has-finished\n")

然后你继续阅读输出,直到找到一行"Command-has-finished"

检查JSch Exec.java example的阅读代码。