##// END OF EJS Templates
Read each from stream until separator found or buffer is full
Garland Zhang -
Show More
@@ -4,6 +4,7 b''
4 4 # Distributed under the terms of the Modified BSD License.
5 5
6 6 import asyncio
7 import asyncio.exceptions
7 8 import atexit
8 9 import errno
9 10 import os
@@ -208,15 +209,23 b' class ScriptMagics(Magics):'
208 209 """Call a coroutine on the asyncio thread"""
209 210 return asyncio.run_coroutine_threadsafe(coro, event_loop).result()
210 211
212 async def _readchunk(stream):
213 try:
214 return await stream.readuntil(b'\n')
215 except asyncio.exceptions.IncompleteReadError as e:
216 return e.partial
217 except asyncio.exceptions.LimitOverrunError as e:
218 return await stream.read(e.consumed)
219
211 220 async def _handle_stream(stream, stream_arg, file_object):
212 221 while True:
213 line = (await stream.readline()).decode("utf8", errors="replace")
214 if not line:
222 chunk = (await _readchunk(stream)).decode("utf8", errors="replace")
223 if not chunk:
215 224 break
216 225 if stream_arg:
217 self.shell.user_ns[stream_arg] = line
226 self.shell.user_ns[stream_arg] = chunk
218 227 else:
219 file_object.write(line)
228 file_object.write(chunk)
220 229 file_object.flush()
221 230
222 231 async def _stream_communicate(process, cell):
General Comments 0
You need to be logged in to leave comments. Login now