如何解决Paramiko 在 while 循环中挂在 channel.makefile.read() 上
我一直无法解决这个问题,但我怀疑熟悉 Paramiko/ssh2 的人很容易弄清楚。
下面的代码在只执行一次时可以正常工作,但是当包含在 while 循环中时,它会挂在 stdout.read() 上。我无法使用 exec_command,因为它没有返回正确的输出(我通过 SSH 连接的设备不是标准微控制器,我仍然不确定它使用的究竟是什么编码或 ssh 参数)。由于这有效,我想连续查询设备,但在将命令包装在 while 循环中时它不起作用。
我还尝试更改 while 循环的包装方式,包括从初始 SSH 连接开始包装整个代码块,环绕 channel.close 等。
import paramiko
import time
freewave_shell = paramiko.SSHClient()
freewave_shell.set_missing_host_key_policy(paramiko.AutoAddPolicy())
freewave_shell.connect("an.ip.add.ress",username="user",password="pass")
chan = freewave_shell.invoke_shell()
while (1)
stdin = chan.makefile_stdin('wb')
stdout = chan.makefile('rb')
stdin.write('''
signalLevel
noiseLevel
signalMargin
VSWR
exit
''')
print('HERE')
print(stdout.read())
stdout.close()
stdin.close()
chan.close()
freewave_shell.close()
解决方法
我认为您的代码不可靠。
但主要问题是,如果关闭 I/O,则必须重新连接通道。因此,您必须将 invoke_shell
调用移动到循环中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。