コード例 #1
0
 def read(self, size):
     if self._eof:
         raise SubprocessStreamEOFError
     if self._pos + size <= self._buf_len:
         buf = bytes(self._buf[self._pos:self._pos + size])
         self._pos += size
         return buf
     else:
         size_left = size
         bio = BytesIO()
         while size_left:
             c = self._buf[self._pos:min(self._pos +
                                         size_left, self._buf_len)]
             bio.write(c)
             size_left -= len(c)
             self._pos += len(c)
             if size_left <= 0:
                 break
             self._q_req.put(options.cupid.mp_buffer_size)
             recv_size = self._q_rep.get()
             if recv_size < 0:
                 self._eof = True
                 break
             self._buf_len = recv_size
             self._pos = 0
         return bio.getvalue()
コード例 #2
0
 def read(self, size=-1):
     if Subprocess_StdIStream_eof(self._ptr):
         raise SubprocessStreamEOFError('Subprocess stream exhausted')
     if size < 0:
         buf_io = BytesIO()
         while True:
             try:
                 chunk = self.read(READ_CHUNK)
             except SubprocessStreamEOFError:
                 chunk = b''
             buf_io.write(chunk)
             if len(chunk) < READ_CHUNK:
                 break
         return buf_io.getvalue()
     else:
         p = create_string_buffer(size)
         Subprocess_StdIStream_read(self._ptr, p, size)
         return p.raw