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

问题描述 投票:0回答:1

我正在尝试登录思科交换机并在那里执行一些操作(例如配置端口)。显然我无法在 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

python ssh paramiko cisco
1个回答
0
投票

一般来说,您应该为此使用“exec”通道。 “shell”通道不应用于自动执行命令。

但据我所知,您的服务器不支持“exec”通道的多个命令。 我为其他读者添加了上述评论,不要尝试使用此解决方案,除非他们真的必须这样做。


如果必须使用“shell”通道,就必须使用shell技术。

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

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

然后继续阅读输出,直到找到一行

"Command-has-finished"

查看JSch

Exec.java
示例中的读取代码。

© www.soinside.com 2019 - 2024. All rights reserved.