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()
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()