我还没能解决这个问题,但我怀疑熟悉Paramiko/ssh2的人很容易就知道了
下面的代码在只执行一次时可以正常工作,但当包装在while循环中时,它挂起在stdout.read()上。我不能使用exec_命令,因为它没有返回正确的输出(我正在使用的设备不是标准的微控制器,我仍然不确定它使用的是什么编码或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
调用移动到循环中相关问题 更多 >
编程相关推荐