有时python select.select给出空字符串

时间:2016-11-03 13:46:21

标签: python select ssh paramiko

我编写的代码在下面执行命令时读取ssh的输出是示例代码

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时,有时我得到像[]这样的空字符串,因为我的执行不会继续进行。如何处理这种情况

1 个答案:

答案 0 :(得分:0)

对不起,但问题不明确。如果你的readq没有成员,则根本不执行for循环(并且不会引发异常)。在这种情况下,这是for循环下面的所有代码。这是你问的问题的答案吗?