2016-11-03 1 views
0

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

stdin, stdout, stderr = ssh.exec_command(cmd) 
channel = stdout.channel 
stdin.close() 
channel.shutdown_write() 
stdout_chunks=[] 
exit_status = 1 
#stdout_chunks.append(stdout.channel.recv(len(stdout.channel.in_buffer))) 
stdout_chunks.append(stdout.channel.recv(1024)) 
#or channel.recv_ready() or channel.recv_stderr_ready() 
while not channel.closed or channel.recv_ready() or channel.recv_stderr_ready(): 
    readq, _, _ = select.select([stdout.channel], [], [], timeout) 
for c in readq: 
     if c.recv_ready(): 
      stdout_chunks.append(stdout.channel.recv(512)) 
      got_chunk = True 
      print stdout_chunks[-1] 

     if c.recv_stderr_ready(): 
      print stderr.channel.recv_stderr(512) 
      got_chunk = True 

    if not got_chunk and stdout.channel.exit_status_ready() and not stderr.channel.recv_stderr_ready() and not stdout.channel.recv_ready(): 
     stdout.channel.shutdown_read() 
     stdout.channel.close() 
     stdout.channel.recv_exit_status() 
     break 

Но когда я печать readq иногда я получаю пустую строку как [] из-за того, что мое исполнение не продолжается. Как справиться с подобным сценарием

ответ

0

Извините, но вопрос непонятен. Если ваш readq не имеет членов, тогда цикл for не выполняется вообще (и исключение не возникает). В этом случае это все код ниже цикла for. Это ответ на вопрос, который вы задаете?

+0

select всегда возвращает, увеличился ли файл с момента последнего чтения, а затем, как он возвращает пустой список? –

Смежные вопросы