New submission from Vahid Mardani: Assume this simple script for reading from stdin:
```python #! /usr/bin/env python3 import sys import os import asyncio async def main(loop): done = False fileno = sys.stdin.fileno() def _reader(): nonlocal done chunk = os.read(fileno, 1024) if not chunk: loop.remove_reader(fileno) done = True return print(chunk.decode(), end='') loop.add_reader(fileno, _reader) while not done: await asyncio.sleep(1) if __name__ == '__main__': main_loop = asyncio.get_event_loop() main_loop.run_until_complete(main(main_loop)) ``` When I run it by: ```bash $ ./stdin_issue.py <<EOF > hello > EOF ``` I get: ``` Traceback (most recent call last): File "/usr/lib/python3.5/asyncio/selector_events.py", line 234, in add_reader key = self._selector.get_key(fd) File "/usr/lib/python3.5/selectors.py", line 191, in get_key raise KeyError("{!r} is not registered".format(fileobj)) from None KeyError: '0 is not registered' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./stdin_issue.py", line 41, in <module> main_loop.run_until_complete(main(main_loop)) File "/usr/lib/python3.5/asyncio/base_events.py", line 387, in run_until_complete return future.result() File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result raise self._exception File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step result = coro.send(None) File "./stdin_issue.py", line 34, in main loop.add_reader(fileno, _reader) File "/usr/lib/python3.5/asyncio/selector_events.py", line 237, in add_reader (handle, None)) File "/usr/lib/python3.5/selectors.py", line 411, in register self._epoll.register(key.fd, epoll_events) PermissionError: [Errno 1] Operation not permitted ``` But the: ```bash echo "Hello" | ./stdin_issue.py ``` Is working well. I was already tried this with the `select.select` directly, and it working: ``` def using_select(): files = [sys.stdin.fileno()] while True: readables, _, errors = select(files, [], files) if errors: print('ERROR:', errors) return if readables: for f in readables: chunk = os.read(f, 1024) if not chunk: return print(chunk.decode(), end='') ``` ---------- components: asyncio messages: 288941 nosy: gvanrossum, vahid.mardani, yselivanov priority: normal severity: normal status: open title: `loop.add_reader` and `<<EOF` versions: Python 3.5 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29717> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com