Paramiko在while循环中挂起channel.makefile.read()

2024-09-30 22:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我还没能解决这个问题,但我怀疑熟悉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()

Tags: 代码import命令paramikoclosereadstdinstdout
1条回答
网友
1楼 · 发布于 2024-09-30 22:25:52

我认为你的代码几乎不可靠

但主要问题是,如果关闭I/O,则必须重新连接通道。因此,您必须将invoke_shell调用移动到循环中

相关问题 更多 >