import asyncio import sys # copied from https://stackoverflow.com/questions/64303607/python-asyncio-how-to-read-stdin-and-write-to-stdout async def connect_stdin_stdout(): loop = asyncio.get_event_loop() reader = asyncio.StreamReader() protocol = asyncio.StreamReaderProtocol(reader) await loop.connect_read_pipe(lambda: protocol, sys.stdin) w_transport, w_protocol = await loop.connect_write_pipe(asyncio.streams.FlowControlMixin, sys.stdout) writer = asyncio.StreamWriter(w_transport, w_protocol, reader, loop) return reader, writer async def pipe_loop(reader, writer): while True: #res = await reader.readline() res = await reader.read(1024) #res = await reader.readchunk() if not res: break writer.write(res) await writer.drain() async def main(): reader, writer = await connect_stdin_stdout() tcp_reader, tcp_writer = await asyncio.open_connection('localhost', 9876) task_totcp = asyncio.create_task(pipe_loop(reader, tcp_writer)) task_fromtcp = asyncio.create_task(pipe_loop(tcp_reader, writer)) await asyncio.wait([task_totcp, task_fromtcp]) if __name__ == "__main__": asyncio.run(main())