Парамико пропускает некоторые данные на канале recv

Я пытаюсь выполнить команду, которая прослушивает последовательный порт и печатает на стандартный вывод. Команда работает непрерывно, она невыход или остановка. Когда я использую консоль SSH с замазкой, я вижу, что данные постоянно обновляются на консоли.

Я могу отправить команду и запустить трассировку. Когда я пытаюсь прочитать выходные данные, используя канал Paramiko, прочитайте, используяrecv функция. Я'Я наблюдаю, что это незахватить все данные, выданные анализатором.

Я выполняю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)

Вы бы случайно не получили только первые 2048 байт?

Channel.recv() принимает число байтов, которые вы хотите прочитать, в качестве параметра. Если вы хотите прочитать больше байтов, вам нужно увеличить это число. Например,channel.recv(4000) напечатает первые 4000 байтов.

 Ben03 июн. 2013 г., 09:28
Может быть, было бы полезно, если бы вы опубликовали то, что вывидишь тогда @Gops
 Gops03 июн. 2013 г., 05:55
Нет, ответ случайный. Иногда он пропускает первую часть ответа, иногда последнюю часть.

у меня та же проблема, и я нашел решение,

может быть, не очень, но у меня это работает

Вот'кусок кода, надеюсь, это поможет :)

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)
 Manu Mora10 апр. 2015 г., 13:05
Это прекрасно работает для меня :)

Ваш ответ на вопрос