Example #1
0
 def _read_output_buffer(self, _buffer, timeout=None):
     timer = GTimeout(seconds=timeout, exception=Timeout)
     remainder = b""
     remainder_len = 0
     timer.start()
     try:
         for data in _buffer:
             pos = 0
             size = len(data)
             while pos < size:
                 linesep, new_line_pos = find_eol(data, pos)
                 if linesep == -1:
                     remainder += data[pos:]
                     remainder_len = len(remainder)
                     break
                 end_of_line = pos+linesep
                 if remainder_len > 0:
                     line = remainder + data[pos:end_of_line]
                     remainder = b""
                     remainder_len = 0
                 else:
                     line = data[pos:end_of_line]
                 yield line
                 pos += linesep + new_line_pos
         if remainder_len > 0:
             # Finished reading without finding ending linesep
             yield remainder
     finally:
         timer.close()
Example #2
0
 def _read_output(self, read_func, timeout=None):
     remainder = b""
     remainder_len = 0
     size, data = read_func()
     t = GTimeout(seconds=timeout, exception=Timeout)
     t.start()
     try:
         while size == LIBSSH2_ERROR_EAGAIN or size > 0:
             while size == LIBSSH2_ERROR_EAGAIN:
                 self.poll(timeout=timeout)
                 size, data = read_func()
             while size > 0:
                 pos = 0
                 while pos < size:
                     linesep, new_line_pos = find_eol(data, pos)
                     if linesep == -1:
                         remainder += data[pos:]
                         remainder_len = len(remainder)
                         break
                     end_of_line = pos + linesep
                     if remainder_len > 0:
                         line = remainder + data[pos:end_of_line]
                         remainder = b""
                         remainder_len = 0
                     else:
                         line = data[pos:end_of_line]
                     yield line
                     pos += linesep + new_line_pos
                 size, data = read_func()
         if remainder_len > 0:
             # Finished reading without finding ending linesep
             yield remainder
     finally:
         t.close()