我尝试登录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
?
答案 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的阅读代码。