homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vahid.mardani
Recipients gvanrossum, vahid.mardani, yselivanov
Date 2017年03月03日.22:33:57
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1488580437.95.0.510009265804.issue29717@psf.upfronthosting.co.za>
In-reply-to
Content
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='')
```
History
Date User Action Args
2017年03月03日 22:33:57vahid.mardanisetrecipients: + vahid.mardani, gvanrossum, yselivanov
2017年03月03日 22:33:57vahid.mardanisetmessageid: <1488580437.95.0.510009265804.issue29717@psf.upfronthosting.co.za>
2017年03月03日 22:33:57vahid.mardanilinkissue29717 messages
2017年03月03日 22:33:57vahid.mardanicreate

AltStyle によって変換されたページ (->オリジナル) /