Ich versuche stdin asynchron auf Windows 7 64-Bit und Python 3.4.3aysncio nicht lesen kann stdin auf Windows
Ich versuchte dies inspiriert von einem SO answer zu lesen:
import asyncio
import sys
def reader():
print('Received:', sys.stdin.readline())
loop = asyncio.get_event_loop()
task = loop.add_reader(sys.stdin.fileno(), reader)
loop.run_forever()
loop.close()
Es ist jedoch wirft eine OSError: [WInError 100381] An operation was attempted on something that is not a socket
.
Könnte ein dateiähnliches Objekt wie stdin
in eine Klasse eingebettet werden, um es die API eines Sockets zu geben? Ich habe asked this question separately, aber wenn die Lösung einfach ist, antworten Sie bitte hier.
Unter der Annahme, dass ich nicht eine dateiähnliche Objekt wickeln kann es sich um eine Buchse zu machen, habe ich versucht Streams mit wie this gist inspiriert:
import asyncio
import sys
@asyncio.coroutine
def stdio(loop):
reader = asyncio.StreamReader(loop=loop)
reader_protocol = asyncio.StreamReaderProtocol(reader)
yield from loop.connect_read_pipe(lambda: reader_protocol, sys.stdin)
@asyncio.coroutine
def async_input(loop):
reader = yield from stdio(loop)
line = yield from reader.readline()
return line.decode().replace('\r', '').replace('\n', '')
@asyncio.coroutine
def main(loop):
name = yield from async_input(loop)
print('Hello ', name)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()
Und das wirft ein NotImplementedError
in asyncio.base_events._make_read_pipe_transport
Bitte beraten, wie zu lesen stdin
mit asyncio
unter Windows ...