Paramiko在频道recv上跳过一些数据

时间:2013-06-01 10:25:16

标签: python paramiko

我尝试执行一个嗅探串口并在stdout上打印的命令。该命令连续运行,不会退出或停止。当我使用putty SSH控制台时,我可以在控制台上看到数据不断更新。

我可以发送命令并启动跟踪。当我尝试使用recv函数使用Paramiko通道读取输出数据时。我观察到它没有捕获嗅探器发出的所有数据。

检查recv状态后,我执行recv_ready操作。

以下是代码。如何避免错过数据?

ssh= paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('host.example.com')
channel = ssh.get_transport().open_session()
channel.get_pty()

channel.exec_command("sniff /dev/stty2")

while(True):
    if(channel.recv_ready): # Doesnt get triggered often
        print channel.recv(2048) # Reads only a part of the data

2 个答案:

答案 0 :(得分:2)

我在这里遇到同样的问题,我找到了解决方案,
也许不是一个伟大的,但它适用于我 这是一段代码,希望对此有所帮助:)

while True:
    if channel.recv_ready():
        break
    time.sleep(2)
channel.send('exit\n')

stdout_data = []
try:
    part = channel.recv(4096)
    while part:
        stdout_data.append(part)
        part = channel.recv(nbytes)
except:
    raise

print 'exit status: ', channel.recv_exit_status()
print ''.join(stdout_data)

答案 1 :(得分:0)

你有没有机会获得前2,048个字节?

Channel.recv()将您想要读取的字节数作为参数。如果要读取更多字节,则需要增加此数字。例如,channel.recv(4000)将打印前4,000个字节。