Честно говоря, я не смог вывести это.
Код: Выделить всё
import sys, os
os.set_blocking(sys.stdin.fileno(), False)
c = sys.stdin.read(10)
print(c)
- входит в число (цитата) «обычных текстовых файлов, подобных тем, которые возвращаются open()», поэтому по выводу это объект TextIOWrapper.
Код: Выделить всё
sys.stdin
- Объект TextIOWrapper — это
- Вся документация io.TextIO не делает различий между блокировками. /неблокирующий. В частности, io.TextIOBase.read(size=-1, /)
- указано, что такие методы, как read() (жирный шрифт — мой):
Код: Выделить всё
BufferedIOBaseВ документации
Что еще больше усложняет ситуацию, я заметил, что sys.stdout.buffer существует (по крайней мере, в моей реализации CPython), и это BufferedReader, который наследуется от BufferedIOBase, и
- в документации указано, что io.BufferedReader.read(size=-1, /):
Чтение и возврат size байтов или, если size не задано или отрицательное значение, до тех пор, пока не будет достигнут конец EOF или если вызов чтения не заблокируется в неблокирующем режиме.< /p>
(кстати, мой английский недостаточно хорош, чтобы понять, что будет возвращено в случае вызова, который блокируется в неблокирующем режиме).< /p>
Наконец:
- PEP3116 заявляет, что (жирный шрифт — мой; сегодня IOError заменен на OSError)
что, кажется, контрастирует с 4) («поднять» против «можно поднять») и 5) («поднять» против вообще не повышать).
Подробнее здесь: https://stackoverflow.com/questions/793 ... stdin-read