sys.stdin, sys.stdout, sys.stderr
sys.stdin, sys.stdout, sys.stderr
Файловые объекты, используемые интерпретатором для стандартного ввода, вывода и ошибок:
stdin используется для всего интерактивного ввода (включая вызовы input ());
stdout используется для вывода операторов print () и выражений, а также подсказок input ();
Собственные запросы интерпретатора и его сообщения об ошибках отправляются на stderr.
Эти потоки представляют собой обычные текстовые файлы, подобные тем, которые возвращаются функцией open (). Их параметры выбраны следующим образом:
Кодировка символов зависит от платформы. Платформы, отличные от Windows, используют кодировку локали (см. Locale.getpreferredencoding ()). В Windows для консольного устройства используется UTF-8. Несимвольные устройства, такие как дисковые файлы и каналы, используют кодировку языкового стандарта системы (то есть кодовую страницу ANSI). Неконсольные символьные устройства, такие как NUL (т.е. где isatty () возвращает
True
), используют значение кодовых страниц ввода и вывода консоли при запуске, соответственно для stdin и stdout / stderr. По умолчанию используется кодировка языкового стандарта системы, если процесс изначально не привязан к консоли. Особое поведение консоли можно переопределить, установив переменную среды PYTHONLEGACYWINDOWSSTDIO перед запуском Python. В этом случае кодовые страницы консоли используются, как и для любого другого символьного устройства. На всех платформах вы можете переопределить кодировку символов, установив переменную среды PYTHONIOENCODING перед запуском Python или используя новый параметр командной строки -Xutf8
и переменную среды PYTHONUTF8. Однако для консоли Windows это применимо, только если также задано PYTHONLEGACYWINDOWSSTDIO.В интерактивном режиме потоки stdout и stderr буферизуются по строкам. В противном случае они буферизируются по блокам, как обычные текстовые файлы. Вы можете переопределить это значение с помощью параметра командной строки -u.
Для записи или чтения двоичных данных из / в стандартные потоки используйте базовый объект двоичного буфера. Например, чтобы записать байты в стандартный вывод, используйте sys.stdout.buffer.write (b'abc ')
.
Однако, если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться ее код), имейте в виду, что стандартные потоки могут быть заменены файловыми объектами, такими как io.StringIO, которые не поддерживают атрибут buffer
.
Last updated