Source code for tBB.async_stdio

# From: https://gist.github.com/nathan-hoad/8966377

import os
import asyncio
import sys
from asyncio.streams import StreamWriter, FlowControlMixin

reader, writer = None, None


@asyncio.coroutine
[docs]def stdio(loop=None): if loop is None: loop = asyncio.get_event_loop() reader = asyncio.StreamReader() reader_protocol = asyncio.StreamReaderProtocol(reader) writer_transport, writer_protocol = yield from loop.connect_write_pipe(FlowControlMixin, os.fdopen(0, 'wb')) writer = StreamWriter(writer_transport, writer_protocol, None, loop) yield from loop.connect_read_pipe(lambda: reader_protocol, sys.stdin) return reader, writer
@asyncio.coroutine
[docs]def async_input(message): if isinstance(message, str): message = message.encode('utf8') global reader, writer if (reader, writer) == (None, None): reader, writer = yield from stdio() writer.write(message) yield from writer.drain() line = yield from reader.readline() return line.decode('utf8').replace('\r', '').replace('\n', '')