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 или используя новый параметр командной строки -X utf8 и переменную среды PYTHONUTF8. Однако для консоли Windows это применимо, только если также задано PYTHONLEGACYWINDOWSSTDIO.

  • В интерактивном режиме потоки stdout и stderr буферизуются по строкам. В противном случае они буферизируются по блокам, как обычные текстовые файлы. Вы можете переопределить это значение с помощью параметра командной строки -u.

Для записи или чтения двоичных данных из / в стандартные потоки используйте базовый объект двоичного буфера. Например, чтобы записать байты в стандартный вывод, используйте sys.stdout.buffer.write (b'abc ').

Однако, если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться ее код), имейте в виду, что стандартные потоки могут быть заменены файловыми объектами, такими как io.StringIO, которые не поддерживают атрибут buffer.

Last updated