> For the complete documentation index, see [llms.txt](https://treasuremaster.gitbook.io/python-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/sluzhby-sredy-vypolneniya-python/sys/sys.stdin-sys.stdout-sys.stderr.md).

# sys.stdin, sys.stdout, sys.stderr

#### sys.stdin, sys.stdout, sys.stderr

Файловые объекты, используемые интерпретатором для стандартного ввода, вывода и ошибок:

* **stdin** используется для всего интерактивного ввода (включая вызовы input ());
* **stdout** используется для вывода операторов print () и выражений, а также подсказок input ();
* Собственные запросы интерпретатора и его сообщения об ошибках отправляются на **stderr**.

Эти потоки представляют собой обычные текстовые файлы, подобные тем, которые возвращаются функцией [open ()](/python-docs/vstroennye-obekty/vstroennye-funkcii/open.md). Их параметры выбраны следующим образом:

* Кодировка символов зависит от платформы. Платформы, отличные от Windows, используют кодировку локали (см. Locale.getpreferredencoding ()). В Windows для консольного устройства используется UTF-8. Несимвольные устройства, такие как дисковые файлы и каналы, используют кодировку языкового стандарта системы (то есть кодовую страницу ANSI). Неконсольные символьные устройства, такие как NUL (т.е. где [isatty ()](https://treasuremaster.gitbook.io/python-docs/obshie-sluzhby-operacionnoi-sistemy/os/os.isatty) возвращает `True`), используют значение кодовых страниц ввода и вывода консоли при запуске, соответственно для **stdin** и **stdout** / **stderr**. По умолчанию используется кодировка языкового стандарта системы, если процесс изначально не привязан к консоли. Особое поведение консоли можно переопределить, установив переменную среды PYTHONLEGACYWINDOWSSTDIO перед запуском Python. В этом случае кодовые страницы консоли используются, как и для любого другого символьного устройства. На всех платформах вы можете переопределить кодировку символов, установив переменную среды PYTHONIOENCODING перед запуском Python или используя новый параметр командной строки -X `utf8` и переменную среды PYTHONUTF8. Однако для консоли Windows это применимо, только если также задано PYTHONLEGACYWINDOWSSTDIO.
* В интерактивном режиме потоки **stdout** и **stderr** буферизуются по строкам. В противном случае они буферизируются по блокам, как обычные текстовые файлы. Вы можете переопределить это значение с помощью параметра командной строки -u.

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

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