Документация Python неофициальный перевод

sys.md

1399 строк · 151.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.16/library/sys.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `sys` – системно-зависимые параметры и функции89---1011Этот модуль предоставляет доступ к некоторым переменным, используемым или поддерживаемым интерпретатором, а также к функциям, которые активно взаимодействуют с интерпретатором. Он всегда доступен. Если явно не указано иное, все переменные доступны только для чтения.1213#### `sys.abi_info`1415Добавлено в версии 3.15.1617Объект, содержащий информацию об ABI текущего запущенного интерпретатора Python. Он должен включать сведения, влияющие на ABI CPython таким образом, что требуется конкретная сборка интерпретатора из вариантов, которые могут сосуществовать на одной машине. Например, он не содержит базовую ОС (Linux или Windows), но включает размер указателя, поскольку некоторые системы поддерживают и 32-, и 64-битные сборки. Доступные поля одинаковы на всех платформах; например, *pointer\_size* доступен даже на архитектурах, поддерживающих только 64-бит.1819Доступны следующие атрибуты:2021#### `abi_info.pointer_bits`2223Ширина указателей в битах, целое число, эквивалентно `8 * sizeof(void *)`. Обычно это `32` или `64`.2425#### `abi_info.free_threaded`2627Логическое значение, указывающее, был ли интерпретатор собран с поддержкой [свободной многопоточностью](https://python-all.ru/3.16/glossary.html#term-free-threading). Это отражает либо наличие параметра [`--disable-gil`](https://python-all.ru/3.16/using/configure.html#cmdoption-disable-gil) `configure` (в Unix), либо установку свойства `DisableGil` (в Windows).2829#### `abi_info.debug`3031Логическое значение, указывающее, был ли интерпретатор собран в [режиме отладки](https://python-all.ru/3.16/using/configure.html#debug-build). Это отражает либо наличие параметра [`--with-pydebug`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug) `configure` (в Unix), либо конфигурации `Debug` (в Windows).3233#### `abi_info.byteorder`3435Строка, указывающая порядок байтов платформы, `'big'` или `'little'`. То же, что и атрибут [`byteorder`](https://python-all.ru/3.16/library/sys.html#sys.byteorder).3637#### `sys.abiflags`3839В системах POSIX, где Python был собран с помощью стандартного скрипта `configure`, этот атрибут содержит флаги ABI, как указано в [**PEP 3149**](https://python-all.ru/3.16/library/sys.html).4041Добавлено в версии 3.2.4243Изменено в версии 3.8: Флаги по умолчанию стали пустой строкой (флаг `m` для pymalloc был удалён).4445[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Unix.4647#### `sys.addaudithook(hook)`4849Добавляет вызываемый объект *hook* в список активных аудиторных хуков для текущего (под)интерпретатора.5051Когда аудиторное событие инициируется через функцию [`sys.audit()`](https://python-all.ru/3.16/library/sys.html#sys.audit), каждый хук вызывается в порядке добавления с именем события и кортежем аргументов. Нативные хуки, добавленные с помощью [`PySys_AddAuditHook()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_AddAuditHook), вызываются первыми, затем хуки, добавленные в текущем (под)интерпретаторе. Затем хуки могут зарегистрировать событие, вызвать исключение для прерывания операции или полностью завершить процесс.5253Обратите внимание, что аудиторные хуки предназначены в первую очередь для сбора информации о внутренних или иным образом ненаблюдаемых действиях, будь то в Python или в библиотеках, написанных на Python. Они не подходят для реализации «песочницы». В частности, вредоносный код может легко отключить или обойти хуки, добавленные с помощью этой функции. Как минимум, любые чувствительные с точки зрения безопасности хуки должны быть добавлены с помощью C API [`PySys_AddAuditHook()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_AddAuditHook) до инициализации среды выполнения, а любые модули, допускающие произвольное изменение памяти (такие как [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes)), должны быть полностью удалены или находиться под тщательным наблюдением.5455Вызов `sys.addaudithook()` сам по себе инициирует аудиторное событие с именем `sys.addaudithook` без аргументов. Если какой-либо существующий хук вызывает исключение, производное от [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError), новый хук не будет добавлен, а исключение будет подавлено. В результате вызывающие не могут предполагать, что их хук был добавлен, если только они не контролируют все существующие хуки.5657См. [таблицу аудиторных событий](https://python-all.ru/3.16/library/audit_events.html#audit-events) для всех событий, инициируемых CPython, и [**PEP 578**](https://python-all.ru/3.16/library/sys.html) для обсуждения исходного дизайна.5859Добавлено в версии 3.8.6061Изменено в версии 3.8.1: Исключения, производные от [`Exception`](https://python-all.ru/3.16/library/exceptions.html#Exception), но не от [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError), больше не подавляются.6263**Особенность реализации CPython:** Когда трассировка включена (см. [`settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace)), хуки Python трассируются только в том случае, если вызываемый объект имеет атрибут `__cantrace__`, установленный в истинное значение. В противном случае функции трассировки пропускают хук.6465#### `sys.argv`6667Список аргументов командной строки, переданных скрипту Python. `argv[0]` – это имя скрипта (зависит от операционной системы, является ли это полным именем пути или нет). Если команда была выполнена с использованием опции командной строки [`-c`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-c) интерпретатора, `argv[0]` устанавливается в строку `'-c'`. Если имя скрипта не было передано интерпретатору Python, `argv[0]` – пустая строка.6869Для циклического чтения стандартного ввода или списка файлов, переданных в командной строке, обратитесь к модулю [`fileinput`](https://python-all.ru/3.16/library/fileinput.html#module-fileinput).7071См. также [`sys.orig_argv`](https://python-all.ru/3.16/library/sys.html#sys.orig_argv).7273> **Примечание**74>75> В Unix аргументы командной строки передаются в виде байтов от ОС. Python декодирует их с помощью кодировки файловой системы и обработчика ошибок «surrogateescape». Когда нужны исходные байты, их можно получить с помощью `[os.fsencode(arg) for arg in sys.argv]`.7677#### `sys.audit(event, *args)`7879Инициирует аудиторное событие и запускает все активные аудиторные хуки. *event* – строка, идентифицирующая событие, а *args* может содержать необязательные аргументы с дополнительной информацией о событии. Количество и типы аргументов для данного события считаются публичным и стабильным API и не должны изменяться между выпусками.8081Например, одно из аудиторных событий называется `os.chdir`. Это событие имеет один аргумент *path*, который будет содержать запрошенный новый рабочий каталог.8283`sys.audit()` вызовет существующие аудиторные хуки, передав имя события и аргументы, и вызовет первое исключение, возникшее в любом хуке. В общем случае, если возникает исключение, его не следует обрабатывать, и процесс должен быть завершен как можно быстрее. Это позволяет реализациям хуков решать, как реагировать на конкретные события: они могут просто зарегистрировать событие или прервать операцию, вызвав исключение.8485Хуки добавляются с помощью функций [`sys.addaudithook()`](https://python-all.ru/3.16/library/sys.html#sys.addaudithook) или [`PySys_AddAuditHook()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_AddAuditHook).8687Нативным эквивалентом этой функции является [`PySys_Audit()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_Audit). По возможности предпочтительнее использовать нативную функцию.8889См. [таблицу аудиторных событий](https://python-all.ru/3.16/library/audit_events.html#audit-events) для всех событий, инициируемых CPython.9091Добавлено в версии 3.8.9293#### `sys.base_exec_prefix`9495Эквивалентно [`exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix), но относится к базовой установке Python.9697При работе в [виртуальных окружениях](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments), [`exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix) перезаписывается на префикс виртуального окружения. `base_exec_prefix`, напротив, не изменяется и всегда указывает на базовую установку Python. Дополнительную информацию см. в [Виртуальные окружения](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments).9899Добавлено в версии 3.3.100101#### `sys.base_prefix`102103Эквивалентно [`prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix), но относится к базовой установке Python.104105При работе в [виртуальном окружении](https://python-all.ru/3.16/library/venv.html#venv-def), [`prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix) перезаписывается на префикс виртуального окружения. `base_prefix`, напротив, не изменяется и всегда указывает на базовую установку Python. Дополнительную информацию см. в [Виртуальные окружения](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments).106107Добавлено в версии 3.3.108109#### `sys.byteorder`110111Индикатор естественного порядка байт. Имеет значение `'big'` на платформах с big-endian (от старшего байта к младшему) и `'little'` на платформах с little-endian (от младшего байта к старшему).112113#### `sys.builtin_module_names`114115Кортеж строк, содержащий имена всех модулей, встроенных в данный интерпретатор Python. (Эту информацию нельзя получить иным способом – `modules.keys()` перечисляет только импортированные модули.)116117См. также список [`sys.stdlib_module_names`](https://python-all.ru/3.16/library/sys.html#sys.stdlib_module_names).118119#### `sys.call_tracing(func, args)`120121Вызывает `func(*args)` при включённой трассировке. Состояние трассировки сохраняется и восстанавливается после завершения. Предназначена для вызова из отладчика в контрольной точке, чтобы рекурсивно отлаживать или профилировать другой код.122123Трассировка приостанавливается при вызове трассирующей функции, установленной через [`settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace) или [`setprofile()`](https://python-all.ru/3.16/library/sys.html#sys.setprofile), чтобы избежать бесконечной рекурсии. `call_tracing()` включает явную рекурсию трассирующей функции.124125#### `sys.copyright`126127Строка, содержащая сведения об авторских правах на интерпретатор Python.128129#### `sys._clear_type_cache()`130131Очищает внутренний кеш типов. Кеш типов используется для ускорения поиска атрибутов и методов. Эту функцию следует использовать *только* для удаления лишних ссылок при отладке утечек ссылок.132133Эту функцию следует использовать только для внутренних и специальных целей.134135Устарело с версии 3.13: Вместо неё используйте более общую функцию [`_clear_internal_caches()`](https://python-all.ru/3.16/library/sys.html#sys._clear_internal_caches).136137#### `sys._clear_internal_caches()`138139Очищает все внутренние кеши, связанные с производительностью. Используйте эту функцию *только* для освобождения лишних ссылок и блоков памяти при поиске утечек.140141Добавлено в версии 3.13.142143#### `sys._current_frames()`144145Возвращает словарь, отображающий идентификатор каждого потока на верхний кадр стека, активный в этом потоке на момент вызова функции. Обратите внимание, что функции модуля [`traceback`](https://python-all.ru/3.16/library/traceback.html#module-traceback) могут построить стек вызовов по такому кадру.146147Это особенно полезно для отладки взаимоблокировок: эта функция не требует содействия заблокированных потоков, и стеки вызовов таких потоков заморожены, пока они остаются заблокированными. Кадр, возвращённый для незаблокированного потока, может не соответствовать текущей активности этого потока, когда вызывающий код изучает кадр.148149Эту функцию следует использовать только для внутренних и специальных целей.150151Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys._current_frames` без аргументов.152153#### `sys._current_exceptions()`154155Возвращает словарь, отображающий идентификатор каждого потока на верхнее исключение, активное в этом потоке на момент вызова функции. Если поток в данный момент не обрабатывает исключение, он не включается в результирующий словарь.156157Это наиболее полезно для статистического профилирования.158159Эту функцию следует использовать только для внутренних и специальных целей.160161Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys._current_exceptions` без аргументов.162163Изменено в версии 3.12: Каждое значение в словаре теперь является одним экземпляром исключения, а не кортежем из 3 элементов, как возвращается из `sys.exc_info()`.164165#### `sys.breakpointhook()`166167Эта функция-ловушка вызывается встроенной функцией [`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint). По умолчанию она запускает отладчик [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb), но может быть установлена на любую другую функцию, чтобы можно было выбрать используемый отладчик.168169Сигнатура этой функции зависит от того, что она вызывает. Например, привязка по умолчанию (например, `pdb.set_trace()`) не ожидает аргументов, но эту функцию можно привязать к функции, которая ожидает дополнительные аргументы (позиционные и/или именованные). Встроенная функция `breakpoint()` передаёт свои `*args` и `**kws` напрямую. Всё, что возвращает `breakpointhooks()`, возвращается из `breakpoint()`.170171Реализация по умолчанию сначала проверяет переменную окружения [`PYTHONBREAKPOINT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONBREAKPOINT). Если она установлена в `"0"`, функция немедленно возвращается; то есть это пустая операция. Если переменная окружения не установлена или установлена в пустую строку, вызывается `pdb.set_trace()`. В противном случае эта переменная должна содержать имя функции для запуска, используя точечную нотацию импорта Python, например `package.subpackage.module.function`. В этом случае импортируется `package.subpackage.module`, и полученный модуль должен содержать вызываемый объект с именем `function()`. Он запускается с передачей `*args` и `**kws`, и всё, что возвращает `function()`, `sys.breakpointhook()` возвращает во встроенную функцию [`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint).172173Обратите внимание: если при импорте вызываемого объекта, указанного в [`PYTHONBREAKPOINT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONBREAKPOINT), что-то идёт не так, сообщается [`RuntimeWarning`](https://python-all.ru/3.16/library/exceptions.html#RuntimeWarning) и точка останова игнорируется.174175Также обратите внимание, что если `sys.breakpointhook()` переопределяется программно, [`PYTHONBREAKPOINT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONBREAKPOINT) *не* учитывается.176177Добавлено в версии 3.7.178179#### `sys._debugmallocstats()`180181Выводит в stderr низкоуровневую информацию о состоянии распределителя памяти CPython.182183Если Python [собран в отладочном режиме](https://python-all.ru/3.16/using/configure.html#debug-build) ([`configure --with-pydebug option`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug)), он также выполняет некоторые ресурсоёмкие проверки внутренней согласованности.184185Добавлено в версии 3.3.186187**Особенность реализации CPython:** Эта функция специфична для CPython. Точный формат вывода здесь не определён и может измениться.188189#### `sys.dllhandle`190191Целое число, задающее дескриптор DLL Python.192193[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Windows.194195#### `sys.displayhook(value)`196197Если *value* не равно `None`, эта функция выводит `repr(value)` в `sys.stdout` и сохраняет *value* в `builtins._`. Если `repr(value)` не кодируется в `sys.stdout.encoding` с обработчиком ошибок `sys.stdout.errors` (который, вероятно, `'strict'`), он кодируется в `sys.stdout.encoding` с обработчиком ошибок `'backslashreplace'`.198199`sys.displayhook` вызывается для результата вычисления [выражения](https://python-all.ru/3.16/glossary.html#term-expression), введённого в интерактивном сеансе Python. Отображение этих значений можно настроить, присвоив другую функцию с одним аргументом `sys.displayhook`.200201Псевдокод:202203```python204def displayhook(value):205    if value is None:206        return207    # Установите '_' в None, чтобы избежать рекурсии208    builtins._ = None209    text = repr(value)210    try:211        sys.stdout.write(text)212    except UnicodeEncodeError:213        bytes = text.encode(sys.stdout.encoding, 'backslashreplace')214        if hasattr(sys.stdout, 'buffer'):215            sys.stdout.buffer.write(bytes)216        else:217            text = bytes.decode(sys.stdout.encoding, 'strict')218            sys.stdout.write(text)219    sys.stdout.write("\n")220    builtins._ = value221```222223Изменено в версии 3.2: Используется обработчик ошибок `'backslashreplace'` для [`UnicodeEncodeError`](https://python-all.ru/3.16/library/exceptions.html#UnicodeEncodeError).224225#### `sys.dont_write_bytecode`226227If this is true, Python won’t try to write `.pyc` files on the import of source modules. This value is initially set to `True` or `False` depending on the [`-B`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-B) command line option and the [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE) environment variable, but you can set it yourself to control bytecode file generation.228229#### `sys._emscripten_info`230231[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple), содержащий информацию об окружении на платформе *wasm32-emscripten*. Именованный кортеж является временным и может измениться в будущем.232233#### `_emscripten_info.emscripten_version`234235Версия Emscripten в виде кортежа целых чисел (major, minor, micro), например `(3, 1, 8)`.236237#### `_emscripten_info.runtime`238239Строка среды выполнения, например, пользовательский агент браузера, `'Node.js v14.18.2'` или `'UNKNOWN'`.240241#### `_emscripten_info.pthreads`242243`True`, если Python скомпилирован с поддержкой Emscripten pthreads.244245#### `_emscripten_info.shared_memory`246247`True`, если Python скомпилирован с поддержкой разделяемой памяти.248249[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Emscripten.250251Добавлено в версии 3.12.252253#### `sys.pycache_prefix`254255Если это установлено (не `None`), Python будет записывать файлы `.pyc` кэша байт-кода (и читать их) в параллельном дереве каталогов с корнем в этом каталоге, а не в каталогах `__pycache__` в дереве исходного кода. Любые каталоги `__pycache__` в дереве исходного кода будут игнорироваться, а новые файлы `.pyc` будут записываться внутри префикса pycache. Поэтому, если вы используете [`compileall`](https://python-all.ru/3.16/library/compileall.html#module-compileall) в качестве этапа предварительной сборки, убедитесь, что запускаете его с тем же префиксом pycache (если он есть), который будете использовать во время выполнения.256257Относительный путь интерпретируется относительно текущего рабочего каталога.258259This value is initially set based on the value of the [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) `pycache_prefix=PATH` command-line option or the [`PYTHONPYCACHEPREFIX`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX) environment variable (command-line takes precedence). If neither are set, it is `None`.260261Добавлено в версии 3.8.262263#### `sys.excepthook(type, value, traceback)`264265Эта функция выводит заданную трассировку и исключение в `sys.stderr`.266267Когда возникает неперехваченное исключение, отличное от [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit), интерпретатор вызывает `sys.excepthook` с тремя аргументами: классом исключения, экземпляром исключения и объектом трассировки. В интерактивном сеансе это происходит непосредственно перед возвратом управления в приглашение; в программе Python это происходит непосредственно перед выходом программы. Обработку таких исключений верхнего уровня можно настроить, присвоив другую функцию с тремя аргументами `sys.excepthook`.268269Генерирует событие аудита `sys.excepthook` с аргументами `hook`, `type`, `value`, `traceback`, когда возникает неперехваченное исключение. Если обработчик не установлен, `hook` может быть `None`. Если какой-либо обработчик генерирует исключение, производное от [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError), вызов обработчика будет подавлен. В противном случае исключение обработчика аудита будет зарегистрировано как необрабатываемое и будет вызван `sys.excepthook`.270271> **См. также**272>273> Функция [`sys.unraisablehook()`](https://python-all.ru/3.16/library/sys.html#sys.unraisablehook) обрабатывает необрабатываемые исключения, а функция [`threading.excepthook()`](https://python-all.ru/3.16/library/threading.html#threading.excepthook) обрабатывает исключения, возникающие в [`threading.Thread.run()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.run).274275#### `sys.__breakpointhook__`276277#### `sys.__displayhook__`278279#### `sys.__excepthook__`280281#### `sys.__unraisablehook__`282283Эти объекты содержат исходные значения `breakpointhook`, `displayhook`, `excepthook` и `unraisablehook` на момент запуска программы. Они сохраняются, чтобы `breakpointhook`, `displayhook` и `excepthook`, `unraisablehook` можно было восстановить, если они вдруг будут заменены повреждёнными или альтернативными объектами.284285Добавлено в версии 3.7: \_\_breakpointhook\_\_286287Добавлено в версии 3.8: \_\_unraisablehook\_\_288289#### `sys.exception()`290291Эта функция, вызванная во время выполнения обработчика исключений (например, в предложении `except` или `except*`), возвращает экземпляр исключения, перехваченного этим обработчиком. Когда обработчики исключений вложены друг в друга, доступно только исключение, обрабатываемое самым внутренним обработчиком.292293Если ни один обработчик исключений не выполняется, эта функция возвращает `None`.294295Добавлено в версии 3.12.296297#### `sys.exc_info()`298299Эта функция возвращает представление обработанного исключения в старом стиле. Если в данный момент обрабатывается исключение `e` (так что [`exception()`](https://python-all.ru/3.16/library/sys.html#sys.exception) вернёт `e`), `exc_info()` возвращает кортеж `(type(e), e, e.__traceback__)`. То есть кортеж, содержащий тип исключения (подкласс [`BaseException`](https://python-all.ru/3.16/library/exceptions.html#BaseException)), само исключение и [traceback объект](https://python-all.ru/3.16/reference/datamodel.html#traceback-objects), который, как правило, инкапсулирует стек вызовов в точке, где последний раз произошло исключение.300301Если нигде в стеке не обрабатывается исключение, эта функция возвращает кортеж из трёх значений `None`.302303Изменено в версии 3.11: Поля `type` и `traceback` теперь берутся из `value` (экземпляра исключения), поэтому при изменении исключения во время его обработки изменения отражаются в результатах последующих вызовов `exc_info()`.304305#### `sys.exec_prefix`306307Строка, содержащая префикс директории, зависящий от сайта, в который устанавливаются платформозависимые файлы Python; по умолчанию это также `'/usr/local'`. Этот префикс можно задать во время сборки с помощью аргумента `--exec-prefix` скрипта **configure**. В частности, все файлы конфигурации (например, заголовочный файл `pyconfig.h`) устанавливаются в каталог `exec_prefix/lib/pythonX.Y/config`, а модули разделяемых библиотек – в `exec_prefix/lib/pythonX.Y/lib-dynload`, где *X.Y* – номер версии Python, например `3.2`.308309> **Примечание**310>311> Если используется [виртуальное окружение](https://python-all.ru/3.16/library/venv.html#venv-def), этот `exec_prefix` будет указывать на виртуальное окружение. Значение для установки Python по-прежнему доступно через [`base_exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_exec_prefix). Подробнее см. [Виртуальные окружения](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments).312313Изменено в версии 3.14: При работе в [виртуальном окружении](https://python-all.ru/3.16/library/venv.html#venv-def) [`prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix) и `exec_prefix` теперь устанавливаются в префикс виртуального окружения с помощью [инициализации путей](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init), а не [`site`](https://python-all.ru/3.16/library/site.html#module-site). Это означает, что `prefix` и `exec_prefix` всегда указывают на виртуальное окружение, даже если `site` отключён ([`-S`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-S)).314315#### `sys.executable`316317Строка, содержащая абсолютный путь к исполняемому файлу интерпретатора Python на системах, где это имеет смысл. Если Python не может получить реальный путь к своему исполняемому файлу, `sys.executable` будет пустой строкой или `None`.318319#### `sys.exit([arg])`320321Вызывает исключение [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit), сигнализируя о намерении завершить интерпретатор.322323Необязательный аргумент *arg* может быть целым числом, задающим код завершения (по умолчанию ноль), или объектом другого типа. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение – «аварийным завершением» для оболочек и подобных программ. Большинство систем требуют, чтобы оно находилось в диапазоне 0–127, иначе результат неопределён. В некоторых системах существуют соглашения о присвоении определённых значений определённым кодам завершения, но обычно они слабо развиты; программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех остальных ошибок. Если передан объект другого типа, `None` эквивалентен передаче нуля, а любой другой объект выводится в [`stderr`](https://python-all.ru/3.16/library/sys.html#sys.stderr) и приводит к коду завершения 1. В частности, `sys.exit("some error message")` – быстрый способ выйти из программы при возникновении ошибки.324325Поскольку `exit()` в конечном счёте «всего лишь» вызывает исключение, она завершит процесс только при вызове из главного потока, и исключение не перехватывается. Действия по очистке, заданные предложениями [`finally`](https://python-all.ru/3.16/reference/compound_stmts.html#finally) из [`try`](https://python-all.ru/3.16/reference/compound_stmts.html#try), выполняются, и есть возможность перехватить попытку завершения на внешнем уровне.326327Изменено в версии 3.6: Если возникает ошибка при очистке после того, как интерпретатор Python перехватил [`SystemExit`](https://python-all.ru/3.16/library/exceptions.html#SystemExit) (например, ошибка сброса буферизованных данных в стандартных потоках), код завершения изменяется на 120.328329#### `sys.flags`330331[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple) *flags* предоставляет состояние флагов командной строки. К флагам следует обращаться только по имени, а не по индексу. Атрибуты доступны только для чтения.332333| flags.debug | [`-d`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-d) |334| --- | --- |335| flags.inspect | [`-i`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-i) |336| flags.interactive | [`-i`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-i) |337| flags.isolated | [`-I`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-I) |338| flags.optimize | [`-O`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-O) или [`-OO`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-OO) |339| flags.dont\_write\_bytecode | [`-B`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-B) |340| flags.no\_user\_site | [`-s`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-s) |341| flags.no\_site | [`-S`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-S) |342| flags.ignore\_environment | [`-E`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-E) |343| flags.verbose | [`-v`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-v) |344| flags.bytes\_warning | [`-b`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-b) |345| flags.quiet | [`-q`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-q) |346| flags.hash\_randomization | [`-R`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-R) |347| flags.dev\_mode | [`-X dev`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) ([Режим разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode)) |348| flags.utf8\_mode | [`-X utf8`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) |349| flags.safe\_path | [`-P`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-P) |350| flags.int\_max\_str\_digits | [`-X int_max_str_digits`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) ([ограничение длины преобразования целого числа в строку](https://python-all.ru/3.16/library/stdtypes.html#int-max-str-digits)) |351| flags.warn\_default\_encoding | [`-X warn_default_encoding`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) |352| flags.gil | [`-X gil`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и [`PYTHON_GIL`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_GIL) |353| flags.thread\_inherit\_context | [`-X thread_inherit_context`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и [`PYTHON_THREAD_INHERIT_CONTEXT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_THREAD_INHERIT_CONTEXT) |354| flags.context\_aware\_warnings | [`-X context_aware_warnings`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) и [`PYTHON_CONTEXT_AWARE_WARNINGS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_CONTEXT_AWARE_WARNINGS) |355356Изменено в версии 3.2: Добавлен атрибут `quiet` для нового флага [`-q`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-q).357358Добавлено в версии 3.2.3: Атрибут `hash_randomization`.359360Изменено в версии 3.3: Удалён устаревший атрибут `division_warning`.361362Изменено в версии 3.4: Добавлен атрибут `isolated` для флага [`-I`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-I) `isolated`.363364Изменено в версии 3.7: Добавлен атрибут `dev_mode` для нового [режима разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode), а также атрибут `utf8_mode` для нового флага [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) `utf8`.365366Изменено в версии 3.10: Добавлен атрибут `warn_default_encoding` для флага [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) `warn_default_encoding`.367368Изменено в версии 3.11: Добавлен атрибут `safe_path` для параметра [`-P`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-P).369370Изменено в версии 3.11: Добавлен атрибут `int_max_str_digits`.371372Изменено в версии 3.13: Добавлен атрибут `gil`.373374Изменено в версии 3.14: Добавлен атрибут `thread_inherit_context`.375376Изменено в версии 3.14: Добавлен атрибут `context_aware_warnings`.377378#### `sys.float_info`379380[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple), содержащий информацию о типе float. В нём представлены низкоуровневые сведения о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей точкой, определённым в стандартном заголовочном файле `float.h` для языка программирования C; подробности см. в разделе 5.2.4.2.2 стандарта ISO/IEC C 1999 [\[C99\]](https://python-all.ru/3.16/library/sys.html#c99), «Характеристики типов с плавающей точкой».381382| атрибут | float.h макрос | объяснение |383| --- | --- | --- |384| float\_info.epsilon | `DBL_EPSILON` | разница между 1.0 и наименьшим значением, большим 1.0, которое можно представить в виде числа с плавающей запятой. См. также [`math.ulp()`](https://python-all.ru/3.16/library/math.html#math.ulp). |385| float\_info.dig | `DBL_DIG` | Максимальное количество десятичных цифр, которое можно точно представить в виде числа с плавающей запятой; см. ниже. |386| float\_info.mant\_dig | `DBL_MANT_DIG` | Точность float: количество цифр по основанию `radix` в мантиссе числа с плавающей запятой. |387| float\_info.max | `DBL_MAX` | Максимальное представимое положительное конечное число с плавающей запятой. |388| float\_info.max\_exp | `DBL_MAX_EXP` | Максимальное целое *e*, для которого `radix**(e-1)` является представимым конечным числом с плавающей запятой. |389| float\_info.max\_10\_exp | `DBL_MAX_10_EXP` | Максимальное целое *e*, для которого `10**e` находится в диапазоне представимых конечных чисел с плавающей запятой. |390| float\_info.min | `DBL_MIN` | Минимальное представимое положительное *нормализованное* число с плавающей запятой. Используйте [`math.ulp(0.0)`](https://python-all.ru/3.16/library/math.html#math.ulp) для получения наименьшего положительного *денормализованного* представимого числа с плавающей запятой. |391| float\_info.min\_exp | `DBL_MIN_EXP` | Минимальное целое *e*, для которого `radix**(e-1)` является нормализованным числом с плавающей запятой. |392| float\_info.min\_10\_exp | `DBL_MIN_10_EXP` | Минимальное целое *e*, для которого `10**e` является нормализованным числом с плавающей запятой. |393| float\_info.radix | `FLT_RADIX` | Основание представления порядка. |394| float\_info.rounds | `FLT_ROUNDS` | Целое число, представляющее режим округления для арифметики с плавающей запятой. Оно отражает значение системного макроса `FLT_ROUNDS` на момент запуска интерпретатора: `-1`: неопределимый `0`: к нулю `1`: к ближайшему `2`: к положительной бесконечности `3`: к отрицательной бесконечности Все остальные значения для `FLT_ROUNDS` описывают поведение округления, определяемое реализацией. |395396Атрибут [`sys.float_info.dig`](https://python-all.ru/3.16/library/sys.html#sys.float_info.dig) требует дополнительного пояснения. Если `s` – любая строка, представляющая десятичное число не более чем с `sys.float_info.dig` значащими цифрами, то преобразование `s` в float и обратно даст строку, представляющую то же десятичное значение:397398```python399>>> import sys400>>> sys.float_info.dig40115402>>> s = '3.14159265358979'    # десятичная строка с 15 значащими цифрами403>>> format(float(s), '.15g')  # Преобразование во float и обратно -> то же значение404'3.14159265358979'405```406407Но для строк с более чем [`sys.float_info.dig`](https://python-all.ru/3.16/library/sys.html#sys.float_info.dig) значащими цифрами это верно не всегда:408409```python410>>> s = '9876543211234567'    # 16 значащих цифр – слишком много!411>>> format(float(s), '.16g')  # преобразование изменяет значение412'9876543211234568'413```414415#### `sys.float_repr_style`416417Строка, указывающая, как ведёт себя функция [`repr()`](https://python-all.ru/3.16/library/functions.html#repr) для чисел с плавающей запятой. Если строка имеет значение `'short'`, то для конечного float `x`, `repr(x)` стремится создать короткую строку с тем свойством, что `float(repr(x)) == x`. Это обычное поведение в Python 3.1 и новее. В противном случае `float_repr_style` имеет значение `'legacy'`, и `repr(x)` ведёт себя так же, как в версиях Python до 3.1.418419Добавлено в версии 3.1.420421#### `sys.getallocatedblocks()`422423Возвращает количество блоков памяти, выделенных в данный момент интерпретатором, независимо от их размера. Эта функция в основном полезна для отслеживания и отладки утечек памяти. Из-за внутренних кешей интерпретатора результат может меняться от вызова к вызову; возможно, потребуется вызвать [`_clear_internal_caches()`](https://python-all.ru/3.16/library/sys.html#sys._clear_internal_caches) и [`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect), чтобы получить более предсказуемые результаты.424425Если сборка или реализация Python не может обоснованно вычислить эту информацию, `getallocatedblocks()` разрешено возвращать 0.426427Добавлено в версии 3.4.428429#### `sys.getunicodeinternedsize()`430431Возвращает количество интернированных Unicode-объектов.432433Добавлено в версии 3.12.434435#### `sys.getandroidapilevel()`436437Возвращает уровень API Android на момент сборки в виде целого числа. Это минимальная версия Android, на которой может работать данная сборка Python. Информацию о версии во время выполнения см. в [`platform.android_ver()`](https://python-all.ru/3.16/library/platform.html#platform.android_ver).438439[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Android.440441Добавлено в версии 3.7.442443#### `sys.getdefaultencoding()`444445Возвращает `'utf-8'`. Это имя кодировки строк по умолчанию, используемой в таких методах, как [`str.encode()`](https://python-all.ru/3.16/library/stdtypes.html#str.encode).446447#### `sys.getdlopenflags()`448449Возвращает текущее значение флагов, используемых для вызовов `dlopen()`. Символические имена значений флагов можно найти в модуле [`os`](https://python-all.ru/3.16/library/os.html#module-os) (константы `RTLD_xxx`, например [`os.RTLD_LAZY`](https://python-all.ru/3.16/library/os.html#os.RTLD_LAZY)).450451[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Unix.452453#### `sys.getfilesystemencoding()`454455Возвращает [кодировку файловой системы](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler): кодировку, используемую с обработчиком ошибок файловой системы для преобразования между именами файлов в Unicode и байтами. Обработчик ошибок файловой системы возвращается из [`getfilesystemencodeerrors()`](https://python-all.ru/3.16/library/sys.html#sys.getfilesystemencodeerrors).456457Для лучшей совместимости во всех случаях следует использовать str для имён файлов, хотя представление имён файлов в виде байтов также поддерживается. Функции, принимающие или возвращающие имена файлов, должны поддерживать str или bytes и внутренне преобразовывать в предпочтительное представление системы.458459[`os.fsencode()`](https://python-all.ru/3.16/library/os.html#os.fsencode) и [`os.fsdecode()`](https://python-all.ru/3.16/library/os.html#os.fsdecode) следует использовать, чтобы гарантировать применение правильной кодировки и режима обработки ошибок.460461[Кодировка файловой системы и обработчик ошибок](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler) настраиваются при запуске Python функцией [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read): см. члены [`filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) и [`filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) объекта [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig).462463Изменено в версии 3.2: результат `getfilesystemencoding()` больше не может быть `None`.464465Изменено в версии 3.6: Windows больше не гарантирует возврат `'mbcs'`. См. [**PEP 529**](https://python-all.ru/3.16/library/sys.html) для получения дополнительной информации.466467Изменено в версии 3.7: Возвращает `'utf-8'`, если включён [режим UTF-8 Python](https://python-all.ru/3.16/library/os.html#utf8-mode).468469#### `sys.getfilesystemencodeerrors()`470471Возвращает [обработчик ошибок файловой системы](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler): обработчик ошибок, используемый с кодировкой файловой системы для преобразования между именами файлов в Unicode и байтами. Кодировка файловой системы возвращается из [`getfilesystemencoding()`](https://python-all.ru/3.16/library/sys.html#sys.getfilesystemencoding).472473[`os.fsencode()`](https://python-all.ru/3.16/library/os.html#os.fsencode) и [`os.fsdecode()`](https://python-all.ru/3.16/library/os.html#os.fsdecode) следует использовать, чтобы гарантировать применение правильной кодировки и режима обработки ошибок.474475[Кодировка файловой системы и обработчик ошибок](https://python-all.ru/3.16/glossary.html#term-filesystem-encoding-and-error-handler) настраиваются при запуске Python функцией [`PyConfig_Read()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Read): см. члены [`filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) и [`filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) объекта [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig).476477Добавлено в версии 3.6.478479#### `sys.get_int_max_str_digits()`480481Возвращает текущее значение [ограничения длины преобразования целого числа в строку](https://python-all.ru/3.16/library/stdtypes.html#int-max-str-digits). См. также [`set_int_max_str_digits()`](https://python-all.ru/3.16/library/sys.html#sys.set_int_max_str_digits).482483Добавлено в версии 3.12.484485#### `sys.get_lazy_imports()`486487Возвращает текущий режим ленивого импорта в виде строки.488489- `"normal"`: только импорты, явно помеченные ключевым словом `lazy`, являются ленивыми490- `"all"`: все импорты верхнего уровня потенциально ленивы491492См. также [`set_lazy_imports()`](https://python-all.ru/3.16/library/sys.html#sys.set_lazy_imports) и [**PEP 810**](https://python-all.ru/3.16/library/sys.html).493494Добавлено в версии 3.15.495496#### `sys.get_lazy_imports_filter()`497498Возвращает текущую функцию фильтра ленивых импортов или `None`, если фильтр не установлен.499500Функция фильтра вызывается для каждого потенциально ленивого импорта, чтобы определить, должен ли он действительно быть ленивым. Подробнее о сигнатуре функции фильтра см. [`set_lazy_imports_filter()`](https://python-all.ru/3.16/library/sys.html#sys.set_lazy_imports_filter).501502Добавлено в версии 3.15.503504#### `sys.getrefcount(object)`505506Возвращает счётчик ссылок на *объект*. Возвращаемое значение обычно на единицу больше, чем можно ожидать, поскольку включает (временную) ссылку как аргумент `getrefcount()`.507508Обратите внимание, что возвращаемое значение может не отражать реальное количество ссылок на объект. Например, некоторые объекты являются [бессмертными](https://python-all.ru/3.16/glossary.html#term-immortal) и имеют очень высокий счётчик ссылок, который не отражает фактическое количество ссылок. Поэтому не полагайтесь на точность возвращаемого значения, за исключением случаев, когда оно равно 0 или 1.509510**Особенность реализации CPython:** [Immortal](https://python-all.ru/3.16/glossary.html#term-immortal) объекты с большим счётчиком ссылок можно определить с помощью [`_is_immortal()`](https://python-all.ru/3.16/library/sys.html#sys._is_immortal).511512Изменено в версии 3.12: Бессмертные объекты имеют очень большие счётчики ссылок, которые не соответствуют фактическому количеству ссылок на объект.513514#### `sys.getrecursionlimit()`515516Возвращает текущее значение предела рекурсии – максимальную глубину стека интерпретатора Python. Этот предел предотвращает переполнение стека C и падение Python из-за бесконечной рекурсии. Его можно задать с помощью [`setrecursionlimit()`](https://python-all.ru/3.16/library/sys.html#sys.setrecursionlimit).517518#### `sys.getsizeof(object[, default])`519520Возвращает размер объекта в байтах. Объект может быть любого типа. Все встроенные объекты возвращают корректные результаты, но для сторонних расширений это не обязательно – результат зависит от реализации.521522Учитывается только память, непосредственно занимаемая объектом, а не память объектов, на которые он ссылается.523524Если задан параметр *default*, он будет возвращён в случае, если объект не предоставляет способа получить размер. В противном случае возбуждается [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError).525526`getsizeof()` вызывает метод `__sizeof__` объекта и добавляет дополнительную нагрузку сборщика мусора, если объект управляется сборщиком мусора.527528См. [рецепт рекурсивного sizeof](https://python-all.ru/3.16/library/sys.html) для примера использования `getsizeof()` рекурсивно для определения размера контейнеров и всего их содержимого.529530#### `sys.getswitchinterval()`531532Возвращает «интервал переключения потоков» интерпретатора в секундах; см. [`setswitchinterval()`](https://python-all.ru/3.16/library/sys.html#sys.setswitchinterval).533534Добавлено в версии 3.2.535536#### `sys._getframe([depth])`537538Возвращает объект кадра из стека вызовов. Если задан необязательный целочисленный параметр *depth*, возвращается кадр, находящийся на указанное количество вызовов ниже вершины стека. Если это глубже, чем стек вызовов, возбуждается [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError). Значение по умолчанию для *depth* равно нулю – возвращается кадр на вершине стека вызовов.539540Вызывает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys._getframe` с аргументом `frame`.541542**Особенности реализации CPython:** Эта функция предназначена только для внутренних и специализированных целей. Она не гарантированно существует во всех реализациях Python.543544#### `sys._getframemodulename([depth])`545546Возвращает имя модуля из стека вызовов. Если задан необязательный целочисленный параметр *depth*, возвращается модуль, находящийся на указанное количество вызовов ниже вершины стека. Если это глубже, чем стек вызовов, или модуль не идентифицируется, возвращается `None`. Значение по умолчанию для *depth* равно нулю – возвращается модуль на вершине стека вызовов.547548Вызывает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys._getframemodulename` с аргументом `depth`.549550**Особенности реализации CPython:** Эта функция предназначена только для внутренних и специализированных целей. Она не гарантированно существует во всех реализациях Python.551552Добавлено в версии 3.12.553554#### `sys.getobjects(limit[, type])`555556Эта функция существует только в том случае, если CPython был собран с использованием специальной опции конфигурации [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs). Она предназначена исключительно для отладки проблем сборки мусора.557558Возвращает список из не более *limit* динамически выделенных объектов Python. Если задан *type*, включаются только объекты этого точного типа (не подтипы).559560Объекты из списка небезопасно использовать. В частности, результат будет включать объекты из всех интерпретаторов, у которых общее состояние аллокатора объектов (то есть созданных с [`PyInterpreterConfig.use_main_obmalloc`](https://python-all.ru/3.16/c-api/subinterpreters.html#c.PyInterpreterConfig.use_main_obmalloc), установленным в 1, или с использованием [`Py_NewInterpreter()`](https://python-all.ru/3.16/c-api/subinterpreters.html#c.Py_NewInterpreter), а также [главного интерпретатора](https://python-all.ru/3.16/c-api/subinterpreters.html#sub-interpreter-support)). Смешивание объектов из разных интерпретаторов может привести к сбоям или другому неожиданному поведению.561562**Особенность реализации CPython:** Эту функцию следует использовать только для специализированных целей. Не гарантируется её наличие во всех реализациях Python.563564Изменено в версии 3.14: Результат может включать объекты из других интерпретаторов.565566#### `sys.getprofile()`567568Возвращает профилирующую функцию, установленную с помощью [`setprofile()`](https://python-all.ru/3.16/library/sys.html#sys.setprofile).569570#### `sys.gettrace()`571572Возвращает трассировочную функцию, установленную с помощью [`settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace).573574**Особенность реализации CPython:** Функция `gettrace()` предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.575576#### `sys.getwindowsversion()`577578Возвращает именованный кортеж с информацией о текущей версии Windows. Именованные элементы: *major*, *minor*, *build*, *platform*, *service\_pack*, *service\_pack\_minor*, *service\_pack\_major*, *suite\_mask*, *product\_type* и *platform\_version*. *service\_pack* – строка, *platform\_version* – кортеж из трёх элементов, все остальные значения – целые числа. К компонентам также можно обращаться по имени, так что `sys.getwindowsversion()[0]` эквивалентно `sys.getwindowsversion().major`. Для совместимости с предыдущими версиями по индексу доступны только первые 5 элементов.579580*platform* будет равен `2` (VER\_PLATFORM\_WIN32\_NT).581582*product\_type* может быть одним из следующих значений:583584| Константа | Значение |585| --- | --- |586| `1` (VER\_NT\_WORKSTATION) | Система является рабочей станцией. |587| `2` (VER\_NT\_DOMAIN\_CONTROLLER) | Система является контроллером домена. |588| `3` (VER\_NT\_SERVER) | Система является сервером, но не контроллером домена. |589590Эта функция является обёрткой над функцией Win32 `GetVersionEx()`; см. документацию Microsoft по `OSVERSIONINFOEX()` для получения дополнительных сведений об этих полях.591592*platform\_version* возвращает основной номер версии, дополнительный номер версии и номер сборки текущей операционной системы, а не версию, которая эмулируется для процесса. Она предназначена для использования в журналировании, а не для определения возможностей.593594> **Примечание**595>596> *platform\_version* получает версию из kernel32.dll, которая может иметь версию, отличную от версии ОС. Для получения точной версии ОС используйте модуль [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform).597598[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Windows.599600Изменено в версии 3.2: Изменён на именованный кортеж и добавлены *service\_pack\_minor*, *service\_pack\_major*, *suite\_mask* и *product\_type*.601602Изменено в версии 3.6: Добавлен *platform\_version*603604#### `sys.get_asyncgen_hooks()`605606Возвращает объект *asyncgen\_hooks*, который похож на [`namedtuple`](https://python-all.ru/3.16/library/collections.html#collections.namedtuple) вида `(firstiter, finalizer)`, где *firstiter* и *finalizer* должны быть либо `None`, либо функциями, принимающими [итератор асинхронного генератора](https://python-all.ru/3.16/glossary.html#term-asynchronous-generator-iterator) в качестве аргумента, и используются для планирования финализации асинхронного генератора в цикле событий.607608Добавлено в версии 3.6: Подробнее см. [**PEP 525**](https://python-all.ru/3.16/library/sys.html).609610> **Примечание**611>612> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.16/library/sys.html) для подробностей).613614#### `sys.get_coroutine_origin_tracking_depth()`615616Возвращает текущую глубину отслеживания источника корутины, установленную с помощью [`set_coroutine_origin_tracking_depth()`](https://python-all.ru/3.16/library/sys.html#sys.set_coroutine_origin_tracking_depth).617618Добавлено в версии 3.7.619620> **Примечание**621>622> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.16/library/sys.html) для подробностей). Используйте её только для целей отладки.623624#### `sys.hash_info`625626[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple), задающий параметры реализации числового хеша. Подробнее о хешировании числовых типов см. [Хеширование числовых типов](https://python-all.ru/3.16/library/stdtypes.html#numeric-hash).627628#### `hash_info.width`629630Ширина в битах, используемая для значений хеша.631632#### `hash_info.modulus`633634Простой модуль P, используемый в схеме числового хеширования.635636#### `hash_info.inf`637638Хеш-значение, возвращаемое для положительной бесконечности.639640#### `hash_info.nan`641642(Этот атрибут больше не используется).643644#### `hash_info.imag`645646Множитель, используемый для мнимой части комплексного числа.647648#### `hash_info.algorithm`649650Название алгоритма хеширования для str, bytes и memoryview.651652#### `hash_info.hash_bits`653654Внутренний размер вывода алгоритма хеширования655656#### `hash_info.seed_bits`657658Размер начального ключа алгоритма хеширования659660#### `hash_info.cutoff`661662Порог для оптимизации DJBX33A для коротких строк в диапазоне `[1, cutoff)`.663664Добавлено в версии 3.2.665666Изменено в версии 3.4: Добавлены *algorithm*, *hash\_bits*, *seed\_bits* и *cutoff*.667668#### `sys.hexversion`669670Номер версии, закодированный в виде одного целого числа. Гарантируется, что он увеличивается с каждой версией, включая надлежащую поддержку непроизводственных выпусков. Например, чтобы проверить, что интерпретатор Python имеет версию не ниже 1.5.2, используйте:671672```python673if sys.hexversion >= 0x010502F0:674    # используйте некоторую продвинутую функцию675    ...676else:677    # используйте альтернативную реализацию или предупредите пользователя678    ...679```680681Это называется `hexversion`, поскольку оно действительно имеет смысл только при просмотре как результат передачи его встроенной функции [`hex()`](https://python-all.ru/3.16/library/functions.html#hex). [Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple) [`sys.version_info`](https://python-all.ru/3.16/library/sys.html#sys.version_info) может использоваться для более удобочитаемого кодирования той же информации.682683Более подробная информация о `hexversion` доступна на [API and ABI Versioning](https://python-all.ru/3.16/c-api/apiabiversion.html#apiabiversion).684685#### `sys.implementation`686687Объект, содержащий информацию о реализации текущего интерпретатора Python. Следующие атрибуты должны существовать во всех реализациях Python.688689*name* – идентификатор реализации, например `'cpython'`. Фактическая строка определяется реализацией Python, но гарантированно состоит из строчных букв.690691*version* – это именованный кортеж в том же формате, что и [`sys.version_info`](https://python-all.ru/3.16/library/sys.html#sys.version_info). Он представляет версию *реализации* Python. Это отличается от конкретной версии *языка* Python, которой соответствует текущий интерпретатор, которая представлена `sys.version_info`. Например, для PyPy 1.8 `sys.implementation.version` может быть `sys.version_info(1, 8, 0, 'final', 0)`, тогда как `sys.version_info` будет `sys.version_info(2, 7, 2, 'final', 0)`. Для CPython они совпадают, так как это эталонная реализация.692693*hexversion* – это версия реализации в шестнадцатеричном формате, например [`sys.hexversion`](https://python-all.ru/3.16/library/sys.html#sys.hexversion).694695*cache\_tag* – это тег, используемый механизмом импорта в именах файлов кэшированных модулей. По соглашению, он представляет собой комбинацию имени и версии реализации, например `'cpython-33'`. Однако реализация Python может использовать другое значение, если это уместно. Если `cache_tag` установлено в `None`, это означает, что кэширование модулей должно быть отключено.696697*supports\_isolated\_interpreters* – это логическое значение, указывающее, поддерживает ли данная реализация несколько изолированных интерпретаторов. Для CPython на большинстве платформ оно равно `True`. Платформы с такой поддержкой реализуют низкоуровневый модуль `_interpreters`.698699> **См. также**700>701> [**PEP 684**](https://python-all.ru/3.16/library/sys.html), [**PEP 734**](https://python-all.ru/3.16/library/sys.html) и [`concurrent.interpreters`](https://python-all.ru/3.16/library/concurrent.interpreters.html#module-concurrent.interpreters).702703`sys.implementation` может содержать дополнительные атрибуты, специфичные для реализации Python. Эти нестандартные атрибуты должны начинаться с подчеркивания и не описываются здесь. Независимо от содержимого, `sys.implementation` не будет изменяться во время работы интерпретатора, а также между версиями реализации. (Однако он может измениться между версиями языка Python.) Смотри [**PEP 421**](https://python-all.ru/3.16/library/sys.html) для получения дополнительной информации.704705Добавлено в версии 3.3.706707Изменено в версии 3.14: Добавлено поле `supports_isolated_interpreters`.708709> **Примечание**710>711> Добавление новых обязательных атрибутов должно проходить через обычный процесс PEP. Смотри [**PEP 421**](https://python-all.ru/3.16/library/sys.html) для получения дополнительной информации.712713#### `sys.int_info`714715[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple), содержащий информацию о внутреннем представлении целых чисел в Python. Атрибуты доступны только для чтения.716717#### `int_info.bits_per_digit`718719Количество битов в каждом разряде. Целые числа Python хранятся внутри в системе с основанием `2**int_info.bits_per_digit`.720721#### `int_info.sizeof_digit`722723Размер в байтах типа C, используемого для представления разряда.724725#### `int_info.default_max_str_digits`726727Значение по умолчанию для [`sys.get_int_max_str_digits()`](https://python-all.ru/3.16/library/sys.html#sys.get_int_max_str_digits), если не задано явно.728729#### `int_info.str_digits_check_threshold`730731Минимальное ненулевое значение для [`sys.set_int_max_str_digits()`](https://python-all.ru/3.16/library/sys.html#sys.set_int_max_str_digits), [`PYTHONINTMAXSTRDIGITS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONINTMAXSTRDIGITS) или [`-X int_max_str_digits`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).732733Добавлено в версии 3.1.734735Изменено в версии 3.11: Добавлены [`default_max_str_digits`](https://python-all.ru/3.16/library/sys.html#sys.int_info.default_max_str_digits) и [`str_digits_check_threshold`](https://python-all.ru/3.16/library/sys.html#sys.int_info.str_digits_check_threshold).736737#### `sys.__interactivehook__`738739Когда этот атрибут существует, его значение автоматически вызывается (без аргументов) при запуске интерпретатора в [интерактивном режиме](https://python-all.ru/3.16/tutorial/interpreter.html#tut-interactive). Это происходит после чтения файла [`PYTHONSTARTUP`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONSTARTUP), чтобы можно было установить этот перехватчик там. Модуль [`site`](https://python-all.ru/3.16/library/site.html#module-site) [устанавливает это](https://python-all.ru/3.16/library/site.html#rlcompleter-config).740741Вызывает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `cpython.run_interactivehook` с объектом перехватчика в качестве аргумента при вызове перехватчика при запуске.742743Добавлено в версии 3.4.744745#### `sys.intern(string)`746747Помещает *строку* в таблицу «интернированных» строк и возвращает интернированную строку – *строку* (ту же самую или копию). Интернирование строк полезно для небольшого повышения производительности поиска в словаре: если ключи в словаре интернированы и искомый ключ интернирован, сравнение ключей (после хеширования) может выполняться сравнением указателей, а не строк. Обычно имена, используемые в программах Python, автоматически интернируются, и словари, используемые для хранения атрибутов модулей, классов или экземпляров, имеют интернированные ключи.748749Интернированные строки не являются [бессмертными](https://python-all.ru/3.16/glossary.html#term-immortal); необходимо сохранять ссылку на возвращаемое значение `intern()`, чтобы извлечь из этого пользу.750751#### `sys._is_gil_enabled()`752753Возвращает [`True`](https://python-all.ru/3.16/library/constants.html#True), если [GIL](https://python-all.ru/3.16/glossary.html#term-GIL) включён, и [`False`](https://python-all.ru/3.16/library/constants.html#False), если он отключён.754755Добавлено в версии 3.13.756757**Особенность реализации CPython:** Не гарантируется, что эта возможность существует во всех реализациях Python.758759#### `sys.is_finalizing()`760761Возвращает [`True`](https://python-all.ru/3.16/library/constants.html#True), если главный интерпретатор Python [завершает работу](https://python-all.ru/3.16/glossary.html#term-interpreter-shutdown). В противном случае возвращает [`False`](https://python-all.ru/3.16/library/constants.html#False).762763Смотрите также исключение [`PythonFinalizationError`](https://python-all.ru/3.16/library/exceptions.html#PythonFinalizationError).764765Добавлено в версии 3.5.766767#### `sys._jit`768769Утилиты для наблюдения за JIT-компиляцией.770771**Особенность реализации CPython:** JIT-компиляция является *экспериментальной деталью реализации* CPython. Не гарантируется, что `sys._jit` будет существовать или вести себя одинаково во всех реализациях, версиях или конфигурациях сборки Python.772773Добавлено в версии 3.14.774775#### `_jit.is_available()`776777Возвращает `True`, если текущий исполняемый файл Python поддерживает JIT-компиляцию, и `False` в противном случае. Это можно контролировать, собирая CPython с опцией `--experimental-jit` в Windows и с опцией [`--enable-experimental-jit`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-experimental-jit) на всех других платформах.778779#### `_jit.is_enabled()`780781Возвращает `True`, если JIT-компиляция включена для текущего процесса Python (подразумевает [`sys._jit.is_available()`](https://python-all.ru/3.16/library/sys.html#sys._jit.is_available)), и `False` в противном случае. Если JIT-компиляция доступна, это можно контролировать, установив переменную окружения [`PYTHON_JIT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT) в значение `0` (отключено) или `1` (включено) при запуске интерпретатора.782783#### `_jit.is_active()`784785Возвращает `True`, если верхний кадр Python в данный момент выполняет JIT-код (подразумевает [`sys._jit.is_enabled()`](https://python-all.ru/3.16/library/sys.html#sys._jit.is_enabled)), и `False` в противном случае.786787> **Примечание**788>789> Эта функция предназначена для тестирования и отладки самого JIT. Её следует избегать для любых других целей.790791> **Примечание**792>793> Из-за природы трассирующих JIT-компиляторов повторные вызовы этой функции могут давать неожиданные результаты. Например, ветвление по её возвращаемому значению, скорее всего, приведёт к неожиданному поведению (если это приводит к входу или выходу из JIT-кода):794>795> ```pycon796> >>> for warmup in range(BIG_NUMBER):797> ...     # Эта строка является «горячей» и со временем компилируется JIT:798> ...     if sys._jit.is_active():799> ...         # Эта строка является «холодной» и выполняется в интерпретаторе:800> ...         assert sys._jit.is_active()801> ...802> Traceback (most recent call last):803>   File "<stdin>", line 5, in <module>804>     assert sys._jit.is_active()805>            ~~~~~~~~~~~~~~~~~~^^806> AssertionError807> ```808809#### `sys.last_exc`810811Эта переменная определена не всегда; она устанавливается в экземпляр исключения, когда исключение не обработано и интерпретатор выводит сообщение об ошибке и стек вызовов. Предполагаемое использование – позволить интерактивному пользователю импортировать модуль отладчика и заняться пост-мортем отладкой без необходимости повторно выполнять команду, вызвавшую ошибку. (Обычное использование – `import pdb; pdb.pm()` для входа в пост-мортем отладчик; см. модуль [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) для получения дополнительной информации.)812813Добавлено в версии 3.12.814815#### `sys._is_immortal(op)`816817Возвращает [`True`](https://python-all.ru/3.16/library/constants.html#True), если указанный объект является [бессмертным](https://python-all.ru/3.16/glossary.html#term-immortal), [`False`](https://python-all.ru/3.16/library/constants.html#False) в противном случае.818819> **Примечание**820>821> Объекты, которые являются бессмертными (и поэтому возвращают `True` при передаче этой функции), не гарантированно останутся бессмертными в будущих версиях, и наоборот для смертных объектов.822823Добавлено в версии 3.14.824825**Особенность реализации CPython:** Эту функцию следует использовать только для специализированных целей. Не гарантируется её наличие во всех реализациях Python.826827#### `sys._is_interned(string)`828829Возвращает [`True`](https://python-all.ru/3.16/library/constants.html#True), если указанная строка «интернирована», [`False`](https://python-all.ru/3.16/library/constants.html#False) в противном случае.830831Добавлено в версии 3.13.832833**Особенность реализации CPython:** Не гарантируется, что эта возможность существует во всех реализациях Python.834835#### `sys.last_type`836837#### `sys.last_value`838839#### `sys.last_traceback`840841Эти три переменные устарели; вместо них используйте [`sys.last_exc`](https://python-all.ru/3.16/library/sys.html#sys.last_exc). Они содержат устаревшее представление `sys.last_exc`, возвращаемое из [`exc_info()`](https://python-all.ru/3.16/library/sys.html#sys.exc_info) выше.842843#### `sys.lazy_modules`844845Множество [`set`](https://python-all.ru/3.16/library/stdtypes.html#set) полностью определённых имён модулей, которые были лениво импортированы в текущем интерпретаторе, но ещё не загружены. При первом обращении к лениво импортированному модулю его имя удаляется из этого множества.846847Этот атрибут предназначен для отладки и интроспекции.848849См. также [`set_lazy_imports()`](https://python-all.ru/3.16/library/sys.html#sys.set_lazy_imports) и [**PEP 810**](https://python-all.ru/3.16/library/sys.html).850851Добавлено в версии 3.15.852853#### `sys.maxsize`854855Целое число, задающее максимальное значение, которое может принимать переменная типа [`Py_ssize_t`](https://python-all.ru/3.16/c-api/intro.html#c.Py_ssize_t). Обычно это `2**31 - 1` на 32-битной платформе и `2**63 - 1` на 64-битной платформе.856857#### `sys.maxunicode`858859Целое число, задающее значение самого большого кодового пункта Unicode, то есть `1114111` (`0x10FFFF` в шестнадцатеричной записи).860861Изменено в версии 3.3: До [**PEP 393**](https://python-all.ru/3.16/library/sys.html), `sys.maxunicode` был либо `0xFFFF`, либо `0x10FFFF`, в зависимости от параметра конфигурации, определявшего, хранятся ли символы Unicode как UCS-2 или UCS-4.862863#### `sys.meta_path`864865Список объектов [искателей по мета-пути](https://python-all.ru/3.16/glossary.html#term-meta-path-finder), у которых вызываются методы [`find_spec()`](https://python-all.ru/3.16/library/importlib.html#importlib.abc.MetaPathFinder.find_spec), чтобы определить, может ли один из объектов найти импортируемый модуль. По умолчанию содержит записи, реализующие стандартную семантику импорта Python. Метод `find_spec()` вызывается как минимум с абсолютным именем импортируемого модуля. Если импортируемый модуль находится в пакете, то атрибут [`__path__`](https://python-all.ru/3.16/reference/datamodel.html#module.__path__) родительского пакета передаётся вторым аргументом. Метод возвращает [спецификацию модуля](https://python-all.ru/3.16/glossary.html#term-module-spec) или `None`, если модуль не найден.866867> **См. также**868>869> **[`importlib.abc.MetaPathFinder`](https://python-all.ru/3.16/library/importlib.html#importlib.abc.MetaPathFinder)**870>871> Абстрактный базовый класс, определяющий интерфейс объектов-искателей на `meta_path`.872>873> **[`importlib.machinery.ModuleSpec`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec)**874>875> Конкретный класс, экземпляры которого должен возвращать [`find_spec()`](https://python-all.ru/3.16/library/importlib.html#importlib.abc.MetaPathFinder.find_spec).876877Изменено в версии 3.4: [Спецификации модулей](https://python-all.ru/3.16/glossary.html#term-module-spec) были введены в Python 3.4 согласно [**PEP 451**](https://python-all.ru/3.16/library/sys.html).878879Изменено в версии 3.12: Убран запасной вариант, который искал метод `find_module()`, если запись `meta_path` не имела метода [`find_spec()`](https://python-all.ru/3.16/library/importlib.html#importlib.abc.MetaPathFinder.find_spec).880881#### `sys.modules`882883Это словарь, отображающий имена модулей на уже загруженные модули. Его можно изменять, чтобы принудительно перезагружать модули и выполнять другие трюки. Однако замена словаря не обязательно сработает как ожидается, а удаление важных элементов из словаря может привести к сбою Python. Если нужно перебрать этот глобальный словарь, всегда используйте `sys.modules.copy()` или `tuple(sys.modules)`, чтобы избежать исключений, так как его размер может меняться во время итерации из-за побочных эффектов кода или активности в других потоках.884885#### `sys.orig_argv`886887Список исходных аргументов командной строки, переданных исполняемому файлу Python.888889Элементы `sys.orig_argv` – это аргументы интерпретатора Python, а элементы [`sys.argv`](https://python-all.ru/3.16/library/sys.html#sys.argv) – аргументы программы пользователя. Аргументы, потреблённые самим интерпретатором, будут присутствовать в `sys.orig_argv` и отсутствовать в `sys.argv`.890891Добавлено в версии 3.10.892893#### `sys.path`894895Список строк, задающий путь поиска модулей. Инициализируется из переменной окружения [`PYTHONPATH`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPATH), а также из специфичного для установки значения по умолчанию.896897По умолчанию при инициализации при запуске программы потенциально небезопасный путь добавляется в начало `sys.path` (*перед* записями, вставленными в результате [`PYTHONPATH`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONPATH)):898899- Командная строка `python -m module`: добавить в начало текущий рабочий каталог.900- Командная строка `python script.py`: добавить в начало каталог скрипта. Если это символическая ссылка, разрешить символические ссылки.901- Командные строки `python -c code` и `python` (REPL): добавить в начало пустую строку, что означает текущий рабочий каталог.902903Чтобы не добавлять этот потенциально небезопасный путь, используйте параметр командной строки [`-P`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-P) или переменную окружения [`PYTHONSAFEPATH`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONSAFEPATH).904905Программа может изменять этот список для своих целей. В `sys.path` следует добавлять только строки; все остальные типы данных игнорируются при импорте.906907> **См. также**908>909> - Модуль [`site`](https://python-all.ru/3.16/library/site.html#module-site). В нём описано, как использовать файлы .pth для расширения `sys.path`.910911#### `sys.path_hooks`912913Список вызываемых объектов, которые принимают аргумент-путь и пытаются создать [искатель](https://python-all.ru/3.16/glossary.html#term-finder) для этого пути. Если искатель может быть создан, вызываемый объект должен вернуть его, иначе – возбудить [`ImportError`](https://python-all.ru/3.16/library/exceptions.html#ImportError).914915Впервые описано в [**PEP 302**](https://python-all.ru/3.16/library/sys.html).916917#### `sys.path_importer_cache`918919Словарь, выступающий в роли кэша для объектов [finder](https://python-all.ru/3.16/glossary.html#term-finder). Ключами являются пути, переданные в [`sys.path_hooks`](https://python-all.ru/3.16/library/sys.html#sys.path_hooks), а значениями – найденные finder'ы. Если путь является корректным файловым системным путём, но на `sys.path_hooks` не найден ни один finder, то сохраняется `None`.920921Впервые описано в [**PEP 302**](https://python-all.ru/3.16/library/sys.html).922923#### `sys.platform`924925Строка, содержащая идентификатор платформы. Известные значения:926927| Система | `platform` значение |928| --- | --- |929| AIX | `'aix'` |930| Android | `'android'` |931| Emscripten | `'emscripten'` |932| FreeBSD | `'freebsd'` |933| iOS | `'ios'` |934| Linux | `'linux'` |935| macOS | `'darwin'` |936| Windows | `'win32'` |937| Windows/Cygwin | `'cygwin'` |938| WASI | `'wasi'` |939940На системах Unix, не перечисленных в таблице, значением является имя ОС в нижнем регистре, возвращаемое `uname -s`, с добавлением первой части версии, возвращаемой `uname -r`, например `'sunos5'`, *на момент сборки Python*. Если не требуется проверять конкретную версию системы, рекомендуется использовать следующий идиоматический код:941942```python943if sys.platform.startswith('sunos'):944    # Здесь код, специфичный для SunOS:945```946947Изменено в версии 3.3: На Linux `sys.platform` больше не содержит основной номер версии. Теперь это всегда `'linux'` вместо `'linux2'` или `'linux3'`.948949Изменено в версии 3.8: На AIX `sys.platform` больше не содержит основной номер версии. Теперь это всегда `'aix'` вместо `'aix5'` или `'aix7'`.950951Изменено в версии 3.13: На Android `sys.platform` теперь возвращает `'android'` вместо `'linux'`.952953Изменено в версии 3.14: На FreeBSD `sys.platform` больше не содержит основной номер версии. Теперь это всегда `'freebsd'` вместо `'freebsd13'` или `'freebsd14'`.954955> **См. также**956>957> [`os.name`](https://python-all.ru/3.16/library/os.html#os.name) имеет более грубую гранулярность. [`os.uname()`](https://python-all.ru/3.16/library/os.html#os.uname) выдаёт зависящую от системы информацию о версии.958>959> Модуль [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform) предоставляет подробные проверки идентификации системы.960961#### `sys.platlibdir`962963Имя каталога библиотеки, специфичного для платформы. Используется для построения пути к стандартной библиотеке и путей к установленным модулям расширений.964965Оно равно `"lib"` на большинстве платформ. На Fedora и SuSE на 64-битных платформах оно равно `"lib64"`, что даёт следующие пути `sys.path` (где `X.Y` – это версия Python `major.minor`):966967- `/usr/lib64/pythonX.Y/`: Стандартная библиотека (например, `os.py` модуля [`os`](https://python-all.ru/3.16/library/os.html#module-os))968- `/usr/lib64/pythonX.Y/lib-dynload/`: Модули C-расширений стандартной библиотеки (например, модуль [`errno`](https://python-all.ru/3.16/library/errno.html#module-errno), точное имя файла зависит от платформы)969- `/usr/lib/pythonX.Y/site-packages/` (всегда используйте `lib`, а не `sys.platlibdir`): Сторонние модули970- `/usr/lib64/pythonX.Y/site-packages/`: Модули C-расширений сторонних пакетов971972Добавлено в версии 3.9.973974#### `sys.prefix`975976Строка, содержащая префикс каталога, специфичный для сайта, куда устанавливаются платформенно-независимые файлы Python; на Unix по умолчанию используется `/usr/local`. Этот префикс можно задать во время сборки с помощью аргумента [`--prefix`](https://python-all.ru/3.16/using/configure.html#cmdoption-prefix) скрипта **configure**. Полученные пути описаны в [путях установки](https://python-all.ru/3.16/library/sysconfig.html#installation-paths).977978> **Примечание**979>980> Если используется [виртуальное окружение](https://python-all.ru/3.16/library/venv.html#venv-def), этот `prefix` будет указывать на виртуальное окружение. Значение для установки Python по-прежнему доступно через [`base_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_prefix). Подробнее см. [Виртуальные окружения](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init-virtual-environments).981982Изменено в версии 3.14: При работе в [виртуальном окружении](https://python-all.ru/3.16/library/venv.html#venv-def) `prefix` и [`exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix) теперь устанавливаются в префикс виртуального окружения с помощью [инициализации путей](https://python-all.ru/3.16/library/sys_path_init.html#sys-path-init), а не [`site`](https://python-all.ru/3.16/library/site.html#module-site). Это означает, что `prefix` и `exec_prefix` всегда указывают на виртуальное окружение, даже если `site` отключён ([`-S`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-S)).983984#### `sys.ps1`985986#### `sys.ps2`987988Строки, задающие основное и дополнительное приглашения интерпретатора. Они определены только в интерактивном режиме. Их начальные значения в этом случае – `'>>> '` и `'... '`. Если одной из этих переменных присвоить объект, не являющийся строкой, его [`str()`](https://python-all.ru/3.16/library/stdtypes.html#str) будет вычисляться заново каждый раз, когда интерпретатор готовится читать новую интерактивную команду; это можно использовать для реализации динамического приглашения.989990#### `sys.setdlopenflags(n)`991992Устанавливает флаги, используемые интерпретатором для вызовов `dlopen()`, например, при загрузке модулей расширений. В частности, это включает отложенное разрешение символов при импорте модуля, если вызвано как `sys.setdlopenflags(0)`. Чтобы обмениваться символами между модулями расширений, вызывайте как `sys.setdlopenflags(os.RTLD_GLOBAL)`. Символические имена значений флагов можно найти в модуле [`os`](https://python-all.ru/3.16/library/os.html#module-os) (константы `RTLD_xxx`, например [`os.RTLD_LAZY`](https://python-all.ru/3.16/library/os.html#os.RTLD_LAZY)).993994[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Unix.995996#### `sys.set_int_max_str_digits(maxdigits)`997998Устанавливает [ограничение на длину строкового представления целых чисел](https://python-all.ru/3.16/library/stdtypes.html#int-max-str-digits), используемое этим интерпретатором. См. также [`get_int_max_str_digits()`](https://python-all.ru/3.16/library/sys.html#sys.get_int_max_str_digits).9991000Добавлено в версии 3.12.10011002#### `sys.set_lazy_imports(mode)`10031004Устанавливает глобальный режим ленивых импортов. Параметр *mode* должен быть одной из следующих строк:10051006- `"normal"`: Только импорты, явно помеченные ключевым словом `lazy` становятся ленивыми.1007- `"all"`: Все импорты верхнего уровня потенциально становятся ленивыми.10081009Эта функция предназначена для опытных пользователей, которым необходимо управлять ленивыми импортами во всем приложении. Разработчикам библиотек, как правило, не следует использовать эту функцию, так как она влияет на выполнение приложений.10101011Помимо режима, ленивые импорты можно контролировать с помощью фильтра, предоставляемого [`set_lazy_imports_filter()`](https://python-all.ru/3.16/library/sys.html#sys.set_lazy_imports_filter).10121013См. также [`get_lazy_imports()`](https://python-all.ru/3.16/library/sys.html#sys.get_lazy_imports) и [**PEP 810**](https://python-all.ru/3.16/library/sys.html).10141015Добавлено в версии 3.15.10161017#### `sys.set_lazy_imports_filter(filter)`10181019Устанавливает функцию обратного вызова фильтра ленивых импортов. Параметр *filter* должен быть вызываемым объектом или `None` для очистки фильтра.10201021Функция фильтра вызывается для каждого потенциально ленивого импорта, чтобы определить, должен ли он на самом деле быть ленивым. Она должна иметь следующую сигнатуру:10221023```python1024def filter(importing_module: str, imported_module: str,1025           fromlist: tuple[str, ...] | None) -> bool1026```10271028Где:10291030- *importing\_module* – имя модуля, выполняющего импорт1031- *imported\_module* – разрешённое имя импортируемого модуля (например, `lazy from .spam import eggs` передаёт `package.spam`)1032- *fromlist* – кортеж импортируемых имён (для `from ... import` операторов) или `None` для обычных импортов10331034Фильтр должен возвращать `True`, чтобы разрешить ленивый импорт, или `False`, чтобы принудительно выполнить немедленный импорт.10351036Это расширенная возможность, предназначенная для специализированных пользователей, которым требуется тонкий контроль над поведением ленивых импортов.10371038См. также [`get_lazy_imports_filter()`](https://python-all.ru/3.16/library/sys.html#sys.get_lazy_imports_filter) и [**PEP 810**](https://python-all.ru/3.16/library/sys.html).10391040Добавлено в версии 3.15.10411042#### `sys.setprofile(profilefunc)`10431044Устанавливает профилирующую функцию системы, которая позволяет реализовать профилировщик исходного кода Python на самом Python. См. главу [profile – профилировщик на чистом Python](https://python-all.ru/3.16/library/profile.html#profile) для получения дополнительной информации о профилировщике Python. Профилирующая функция системы вызывается аналогично трассирующей функции системы (см. [`settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace)), но вызывается с другими событиями; например, она не вызывается для каждой исполняемой строки кода (только при вызове и возврате, но событие возврата сообщается, даже если было установлено исключение). Функция привязана к потоку, но у профилировщика нет способа узнать о переключении контекста между потоками, поэтому её использование в присутствии нескольких потоков не имеет смысла. Кроме того, её возвращаемое значение не используется, поэтому она может просто возвращать `None`. Ошибка в профилирующей функции приведёт к её автоматическому сбросу.10451046> **Примечание**1047>1048> Тот же механизм трассировки используется для `setprofile()`, что и для [`settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace). Чтобы трассировать вызовы с помощью `setprofile()` внутри трассировочной функции (например, в точке останова отладчика), см. [`call_tracing()`](https://python-all.ru/3.16/library/sys.html#sys.call_tracing).10491050Функции профилирования должны принимать три аргумента: *frame*, *event* и *arg*. *frame* – это текущий стековый фрейм. *event* – строка: `'call'`, `'return'`, `'c_call'`, `'c_return'` или `'c_exception'`. *arg* зависит от типа события.10511052События имеют следующее значение:10531054**`'call'`**10551056Вызывается функция (или выполняется вход в другой блок кода). Вызывается профилирующая функция; *arg* равен `None`.10571058**`'return'`**10591060Функция (или другой блок кода) собирается вернуть результат. Вызывается профилирующая функция; *arg* – это возвращаемое значение, или `None`, если событие вызвано возбуждением исключения.10611062**`'c_call'`**10631064Готовится вызов C-функции. Это может быть функция расширения или встроенная функция. *arg* – это объект C-функции.10651066**`'c_return'`**10671068C-функция вернула результат. *arg* – это объект C-функции.10691070**`'c_exception'`**10711072C-функция возбудила исключение. *arg* – это объект C-функции.10731074Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys.setprofile` без аргументов.10751076#### `sys.setrecursionlimit(limit)`10771078Устанавливает максимальную глубину стека интерпретатора Python в *limit*. Этот предел предотвращает переполнение C-стека из-за бесконечной рекурсии и аварийное завершение Python.10791080Максимально возможный предел зависит от платформы. Пользователь может увеличить предел, если программа требует глубокой рекурсии, а платформа поддерживает более высокий предел. Это следует делать с осторожностью, так как слишком высокий предел может привести к аварийному завершению.10811082Если новый предел слишком мал для текущей глубины рекурсии, возбуждается исключение [`RecursionError`](https://python-all.ru/3.16/library/exceptions.html#RecursionError).10831084Изменено в версии 3.5.1: Теперь возбуждается исключение [`RecursionError`](https://python-all.ru/3.16/library/exceptions.html#RecursionError), если новый предел слишком мал для текущей глубины рекурсии.10851086#### `sys.setswitchinterval(interval)`10871088Устанавливает интервал переключения потоков интерпретатора (в секундах). Это значение с плавающей точкой определяет идеальную длительность «квантов времени», выделяемых одновременно работающим потокам Python. Обратите внимание, что фактическое значение может быть больше, особенно при использовании долго выполняющихся внутренних функций или методов. Кроме того, какой поток будет запланирован по окончании интервала, решает операционная система – у интерпретатора нет собственного планировщика.10891090Добавлено в версии 3.2.10911092#### `sys.settrace(tracefunc)`10931094Устанавливает трассировочную функцию системы, которая позволяет реализовать отладчик исходного кода Python на Python. Функция привязана к потоку; чтобы отладчик поддерживал несколько потоков, он должен зарегистрировать трассировочную функцию с помощью `settrace()` для каждого отлаживаемого потока или использовать [`threading.settrace()`](https://python-all.ru/3.16/library/threading.html#threading.settrace).10951096Трассировочные функции должны принимать три аргумента: *frame*, *event* и *arg*. *frame* – это [текущий стековый фрейм](https://python-all.ru/3.16/reference/datamodel.html#frame-objects). *event* – строка: `'call'`, `'line'`, `'return'`, `'exception'` или `'opcode'`. *arg* зависит от типа события.10971098Трассировочная функция вызывается (с *event*, установленным в `'call'`) всякий раз, когда входит в новую локальную область видимости; она должна возвращать ссылку на локальную трассировочную функцию для новой области или `None`, если область не должна трассироваться.10991100Локальная трассировочная функция должна возвращать ссылку на саму себя или на другую функцию, которая затем будет использоваться как локальная трассировочная функция для данной области.11011102Если в функции трассировки произошла ошибка, она будет отключена, как если бы была вызвана `settrace(None)`.11031104> **Примечание**1105>1106> Трассировка отключается во время вызова функции трассировки (например, функции, установленной с помощью `settrace()`). О рекурсивной трассировке см. [`call_tracing()`](https://python-all.ru/3.16/library/sys.html#sys.call_tracing).11071108События имеют следующее значение:11091110**`'call'`**11111112Функция вызвана (или начат другой блок кода). Вызывается глобальная функция трассировки; *arg* равно `None`; возвращаемое значение задаёт локальную функцию трассировки.11131114**`'line'`**11151116Интерпретатор собирается выполнить новую строку кода или повторно вычислить условие цикла. Вызывается локальная функция трассировки; *arg* равно `None`; возвращаемое значение задаёт новую локальную функцию трассировки. Подробное объяснение работы см. в `Objects/lnotab_notes.txt`. Построчные события можно отключить для фрейма, установив [`f_trace_lines`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_trace_lines) в [`False`](https://python-all.ru/3.16/library/constants.html#False) для этого [фрейма](https://python-all.ru/3.16/reference/datamodel.html#frame-objects).11171118**`'return'`**11191120Функция (или другой блок кода) собирается вернуть значение. Вызывается локальная функция трассировки; *arg* – это значение, которое будет возвращено, или `None`, если событие вызвано возбуждённым исключением. Возвращаемое значение функции трассировки игнорируется.11211122**`'exception'`**11231124Произошло исключение. Вызывается локальная функция трассировки; *arg* – это кортеж `(exception, value, traceback)`; возвращаемое значение задаёт новую локальную функцию трассировки.11251126**`'opcode'`**11271128Интерпретатор собирается выполнить новый опкод (см. [`dis`](https://python-all.ru/3.16/library/dis.html#module-dis) для подробностей об опкодах). Вызывается локальная функция трассировки; *arg* равно `None`; возвращаемое значение задаёт новую локальную функцию трассировки. Поопкодные события не генерируются по умолчанию: их нужно явно запросить, установив [`f_trace_opcodes`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_trace_opcodes) в [`True`](https://python-all.ru/3.16/library/constants.html#True) для [фрейма](https://python-all.ru/3.16/reference/datamodel.html#frame-objects).11291130Обратите внимание, что при распространении исключения по цепочке вызывающих на каждом уровне генерируется событие `'exception'`.11311132Для более тонкого управления можно задать функцию трассировки явно, присвоив `frame.f_trace = tracefunc`, а не полагаясь на то, что она будет установлена косвенно через возвращаемое значение уже установленной функции трассировки. Это также необходимо для активации функции трассировки на текущем фрейме, чего `settrace()` не делает. Обратите внимание, что для этого глобальная функция трассировки должна быть установлена с помощью `settrace()`, чтобы включить механизм трассировки времени выполнения, но это не обязательно должна быть та же самая функция трассировки (например, это может быть функция с низкими накладными расходами, которая просто возвращает `None`, чтобы немедленно отключить себя на каждом фрейме).11331134Дополнительную информацию об объектах кода и фреймах см. в [Стандартной иерархии типов](https://python-all.ru/3.16/reference/datamodel.html#types).11351136Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys.settrace` без аргументов.11371138**Особенность реализации CPython:** Функция `settrace()` предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.11391140Изменено в версии 3.7: Добавлен тип события `'opcode'`; добавлены атрибуты [`f_trace_lines`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_trace_lines) и [`f_trace_opcodes`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_trace_opcodes) у фреймов.11411142#### `sys.set_asyncgen_hooks([firstiter] [, finalizer])`11431144Принимает два необязательных именованных аргумента, которые являются вызываемыми объектами, принимающими [итератор асинхронного генератора](https://python-all.ru/3.16/glossary.html#term-asynchronous-generator-iterator) в качестве аргумента. Вызываемый объект *firstiter* будет вызван, когда асинхронный генератор будет итерирован в первый раз. Вызываемый объект *finalizer* будет вызван, когда асинхронный генератор будет готов к сборке мусора.11451146Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys.set_asyncgen_hooks_firstiter` без аргументов.11471148Возбуждает [событие аудита](https://python-all.ru/3.16/library/sys.html#auditing) `sys.set_asyncgen_hooks_finalizer` без аргументов.11491150Генерируются два события аудита, поскольку базовый API состоит из двух вызовов, каждый из которых должен порождать собственное событие.11511152Добавлено в версии 3.6: См. [**PEP 525**](https://python-all.ru/3.16/library/sys.html) для получения дополнительных сведений и пример реализации метода *finalizer* в реализации `asyncio.Loop.shutdown_asyncgens` в [Lib/asyncio/base\_events.py](https://python-all.ru/src/main/Lib/asyncio/base_events.py).11531154> **Примечание**1155>1156> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.16/library/sys.html) для подробностей).11571158#### `sys.set_coroutine_origin_tracking_depth(depth)`11591160Позволяет включить или отключить отслеживание происхождения корутин. Если отслеживание включено, атрибут `cr_origin` объектов корутин будет содержать кортеж из кортежей (имя файла, номер строки, имя функции), описывающих трассировку, где был создан объект корутины, причем самый последний вызов будет первым. Если отслеживание отключено, `cr_origin` будет равно `None`.11611162Чтобы включить, передайте значение *depth* больше нуля; это задаёт количество фреймов, информация о которых будет захвачена. Чтобы отключить, установите *depth* в ноль.11631164Эта настройка является потоковой.11651166Добавлено в версии 3.7.11671168> **Примечание**1169>1170> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.16/library/sys.html) для подробностей). Используйте её только для целей отладки.11711172#### `sys.activate_stack_trampoline(backend, /)`11731174Активирует трамплин стекового профилировщика *backend*. Единственный поддерживаемый бэкенд – `"perf"`.11751176Трамплины стека нельзя активировать, если активен JIT.11771178[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Linux.11791180Добавлено в версии 3.12.11811182> **См. также**1183>1184> - [Поддержка Python для профилировщиков, совместимых с perf map](https://python-all.ru/3.16/howto/perf_profiling.html#perf-profiling)1185> - [https://perf.wiki.kernel.org](https://python-all.ru/3.16/library/sys.html)11861187#### `sys.deactivate_stack_trampoline()`11881189Деактивирует текущий бэкенд трамплина стекового профилировщика.11901191Если стековый профилировщик не активирован, эта функция не делает ничего.11921193[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Linux.11941195Добавлено в версии 3.12.11961197#### `sys.is_stack_trampoline_active()`11981199Возвращает `True`, если трамплин стекового профилировщика активен.12001201[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Linux.12021203Добавлено в версии 3.12.12041205#### `sys.remote_exec(pid, script)`12061207Выполняет *script*, файл, содержащий код Python, в удалённом процессе с заданным *pid*.12081209Эта функция возвращает управление немедленно, а код будет выполнен главным потоком целевого процесса при первой же возможности, аналогично обработке сигналов. Нет интерфейса для определения момента выполнения кода. Вызывающий отвечает за то, чтобы файл всё ещё существовал, когда удалённый процесс попытается его прочитать, и чтобы он не был перезаписан.12101211Удалённый процесс должен использовать интерпретатор CPython той же старшей и младшей версии, что и локальный процесс. Если локальный или удалённый интерпретатор является предварительной версией (альфа, бета или кандидат на выпуск), то версии локального и удалённого интерпретаторов должны полностью совпадать.12121213Дополнительные сведения о механизме удалённой отладки см. в [Протокол присоединения удалённой отладки](https://python-all.ru/3.16/howto/remote_debugging.html#remote-debugging).12141215Когда код выполняется в удалённом процессе, возникает событие аудита [auditing event](https://python-all.ru/3.16/library/sys.html#auditing) `sys.remote_exec` с *pid* и путём к файлу скрипта. Это событие возникает в процессе, который вызвал `sys.remote_exec()`.12161217Когда скрипт выполняется в удалённом процессе, возникает событие аудита [auditing event](https://python-all.ru/3.16/library/sys.html#auditing) `cpython.remote_debugger_script` с путём в удалённом процессе. Это событие возникает в удалённом процессе, а не в том, который вызвал `sys.remote_exec()`.12181219[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Unix, Windows.12201221Добавлено в версии 3.14: Подробнее см. [**PEP 768**](https://python-all.ru/3.16/library/sys.html).12221223#### `sys.stdin`12241225#### `sys.stdout`12261227#### `sys.stderr`12281229[Объекты файлов](https://python-all.ru/3.16/glossary.html#term-file-object), используемые интерпретатором для стандартного ввода, вывода и ошибок:12301231- `stdin` используется для всего интерактивного ввода (включая вызовы [`input()`](https://python-all.ru/3.16/library/functions.html#input));1232- `stdout` используется для вывода [`print()`](https://python-all.ru/3.16/library/functions.html#print) и [выражений](https://python-all.ru/3.16/glossary.html#term-expression), а также для приглашений [`input()`](https://python-all.ru/3.16/library/functions.html#input);1233- Собственные приглашения интерпретатора и его сообщения об ошибках выводятся в `stderr`.12341235Эти потоки являются обычными [текстовыми файлами](https://python-all.ru/3.16/glossary.html#term-text-file), подобными тем, что возвращает функция [`open()`](https://python-all.ru/3.16/library/functions.html#open). Их параметры выбираются следующим образом:12361237- Кодировка и обработка ошибок инициализируются из [`PyConfig.stdio_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdio_encoding) и [`PyConfig.stdio_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdio_errors).12381239  В Windows для консольного устройства используется UTF-8. Несимвольные устройства, такие как дисковые файлы и каналы, используют кодировку системной локали (то есть кодовую страницу ANSI). Не консольные символьные устройства, такие как NUL (то есть когда `isatty()` возвращает `True`), используют значения кодовых страниц консольного ввода и вывода при запуске, соответственно для stdin и stdout/stderr. По умолчанию это [кодировка локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding) системы, если процесс изначально не прикреплен к консоли.12401241  Особое поведение консоли можно переопределить, установив переменную окружения PYTHONLEGACYWINDOWSSTDIO перед запуском Python. В этом случае кодовые страницы консоли используются как для любого другого символьного устройства.12421243  На всех платформах можно переопределить кодировку символов, установив переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONIOENCODING) перед запуском Python или используя новый параметр командной строки [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) `utf8` и переменную окружения [`PYTHONUTF8`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONUTF8). Однако для консоли Windows это применимо только в том случае, если также установлена [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO).1244- В интерактивном режиме поток `stdout` буферизуется построчно. В противном случае он буферизуется блоками, как обычные текстовые файлы. Поток `stderr` буферизуется построчно в обоих случаях. Оба потока можно сделать небуферизованными, передав параметр командной строки [`-u`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-u) или установив переменную окружения [`PYTHONUNBUFFERED`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONUNBUFFERED).12451246Изменено в версии 3.9: Неинтерактивный `stderr` теперь буферизуется построчно вместо полной буферизации.12471248> **Примечание**1249>1250> Для записи или чтения двоичных данных в/из стандартных потоков используйте базовый двоичный объект [`buffer`](https://python-all.ru/3.16/library/io.html#io.TextIOBase.buffer). Например, для записи байтов в `stdout` используйте `sys.stdout.buffer.write(b'abc')`.1251>1252> Однако если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться её код), имейте в виду, что стандартные потоки могут быть заменены объектами, подобными файлам, такими как [`io.StringIO`](https://python-all.ru/3.16/library/io.html#io.StringIO), которые не поддерживают атрибут `buffer`.12531254#### `sys.__stdin__`12551256#### `sys.__stdout__`12571258#### `sys.__stderr__`12591260Эти объекты содержат исходные значения `stdin`, `stderr` и `stdout` в начале программы. Они используются во время финализации и могут быть полезны для вывода в реальный стандартный поток, независимо от того, был ли перенаправлен объект `sys.std*`.12611262Его также можно использовать для восстановления реальных файлов до известных работающих файловых объектов, если они были перезаписаны некорректным объектом. Однако предпочтительный способ – явно сохранить предыдущий поток перед его заменой и восстановить сохранённый объект.12631264> **Примечание**1265>1266> При некоторых условиях `stdin`, `stdout` и `stderr`, а также исходные значения `__stdin__`, `__stdout__` и `__stderr__` могут быть `None`. Обычно это происходит в Windows GUI-приложениях, не подключённых к консоли, и в приложениях Python, запущенных с помощью **pythonw**.12671268#### `sys.stdlib_module_names`12691270Frozenset строк, содержащий имена модулей стандартной библиотеки.12711272Он одинаков на всех платформах. Также перечислены модули, недоступные на некоторых платформах, и модули, отключённые при сборке Python. Перечислены все типы модулей: чистые Python-, встроенные, замороженные и модули-расширения. Тестовые модули исключены.12731274Для пакетов перечислен только основной пакет: подпакеты и подмодули не перечисляются. Например, пакет `email` перечислен, а подпакет `email.mime` и подмодуль `email.message` – нет.12751276См. также список [`sys.builtin_module_names`](https://python-all.ru/3.16/library/sys.html#sys.builtin_module_names).12771278Добавлено в версии 3.10.12791280#### `sys.thread_info`12811282[Именованный кортеж](https://python-all.ru/3.16/glossary.html#term-named-tuple), содержащий информацию о реализации потоков.12831284#### `thread_info.name`12851286Имя реализации потоков:12871288- `"nt"`: потоки Windows1289- `"pthread"`: потоки POSIX1290- `"pthread-stubs"`: заглушки потоков POSIX (на платформах WebAssembly без поддержки потоков)1291- `"solaris"`: потоки Solaris12921293#### `thread_info.lock`12941295Имя реализации блокировки:12961297- `"semaphore"`: блокировка использует семафор (Python 3.14 и старше)1298- `"mutex+cond"`: блокировка использует мьютекс и условную переменную (Python 3.14 и старше)1299- `"pymutex"`: блокировка использует реализацию [`PyMutex`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex) (Python 3.15 и новее)1300- `None`, если эта информация неизвестна13011302#### `thread_info.version`13031304Имя и версия библиотеки потоков. Это строка или `None`, если эта информация неизвестна.13051306Добавлено в версии 3.3.13071308#### `sys.tracebacklimit`13091310Когда этой переменной присвоено целое значение, она определяет максимальное количество уровней трассировки, выводимых при необработанном исключении. По умолчанию `1000`. Если установлено `0` или меньше, вся информация трассировки подавляется и выводятся только тип и значение исключения.13111312#### `sys.unraisablehook(unraisable, /)`13131314Обрабатывает неподнимаемое исключение.13151316Вызывается, когда произошло исключение, но у Python нет способа его обработать. Например, когда деструктор вызывает исключение или во время сборки мусора ([`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect)).13171318Аргумент *unraisable* имеет следующие атрибуты:13191320- `exc_type`: Тип исключения.1321- `exc_value`: Значение исключения, может быть `None`.1322- `exc_traceback`: трассировка исключения, может быть `None`.1323- `err_msg`: сообщение об ошибке, может быть `None`.1324- `object`: объект, вызвавший исключение, может быть `None`.13251326Обработчик по умолчанию форматирует `err_msg` и `object` следующим образом: `f'{err_msg}: {object!r}'`; используется сообщение об ошибке «Исключение проигнорировано в», если `err_msg` равно `None`. Как и модуль [`traceback`](https://python-all.ru/3.16/library/traceback.html#module-traceback), по умолчанию это добавляет цвет к исключениям. Это можно отключить с помощью [переменных окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color).13271328`sys.unraisablehook()` можно переопределить, чтобы управлять обработкой неподнимаемых исключений.13291330Изменено в версии 3.15: Исключения теперь выводятся цветным текстом.13311332> **См. также**1333>1334> [`excepthook()`](https://python-all.ru/3.16/library/sys.html#sys.excepthook), который обрабатывает неперехваченные исключения.13351336> **Предупреждение**1337>1338> Сохранение `exc_value` с помощью пользовательского перехватчика может создать циклическую ссылку. Её следует явно очистить, чтобы разорвать цикл, когда исключение больше не нужно.1339>1340> Сохранение `object` с помощью пользовательского перехватчика может воскресить его, если он установлен на объект, который находится в процессе финализации. Избегайте сохранения `object` после завершения пользовательского перехватчика, чтобы не воскрешать объекты.13411342Вызывает событие аудита `sys.unraisablehook` с аргументами *hook*, *unraisable*, когда возникает исключение, которое невозможно обработать. Объект *unraisable* совпадает с тем, что будет передан перехватчику. Если перехватчик не установлен, *hook* может быть `None`.13431344Добавлено в версии 3.8.13451346#### `sys.version`13471348Строка, содержащая номер версии интерпретатора Python, а также дополнительную информацию о номере сборки и используемом компиляторе. Эта строка отображается при запуске интерактивного интерпретатора. Не извлекайте из неё информацию о версии; вместо этого используйте [`version_info`](https://python-all.ru/3.16/library/sys.html#sys.version_info) и функции, предоставляемые модулем [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform).13491350#### `sys.api_version`13511352Версия C API, эквивалентная макросу C [`PYTHON_API_VERSION`](https://python-all.ru/3.16/c-api/module.html#c.PYTHON_API_VERSION). Определена для обратной совместимости.13531354В настоящее время эта константа не обновляется в новых версиях Python и не полезна для версионирования. В будущем это может измениться.13551356#### `sys.version_info`13571358Кортеж, содержащий пять компонентов номера версии: *major*, *minor*, *micro*, *releaselevel* и *serial*. Все значения, кроме *releaselevel*, являются целыми числами; уровень выпуска – `'alpha'`, `'beta'`, `'candidate'` или `'final'`. Значение `version_info`, соответствующее версии Python 2.0, равно `(2, 0, 0, 'final', 0)`. Компоненты также можно получать по имени, поэтому `sys.version_info[0]` эквивалентно `sys.version_info.major` и так далее.13591360Изменено в версии 3.1: Добавлены именованные атрибуты компонентов.13611362#### `sys.warnoptions`13631364Это деталь реализации механизма предупреждений; не изменяйте это значение. Обратитесь к модулю [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings) за дополнительной информацией о механизме предупреждений.13651366#### `sys.winver`13671368Номер версии, используемый для формирования ключей реестра на платформах Windows. Он хранится как строковый ресурс 1000 в DLL Python. Обычно значение представляет собой основной и дополнительный номера версии работающего интерпретатора Python. Он предоставляется в модуле `sys` в информационных целях; изменение этого значения не влияет на ключи реестра, используемые Python.13691370[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Windows.13711372#### `sys.monitoring`13731374Пространство имён, содержащее функции и константы для регистрации колбэков и управления событиями мониторинга. Подробнее см. [`sys.monitoring`](https://python-all.ru/3.16/library/sys.monitoring.html#module-sys.monitoring).13751376#### `sys._xoptions`13771378Словарь различных флагов, специфичных для реализации, переданных через параметр командной строки [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). Имена параметров либо сопоставляются с их значениями, если они указаны явно, либо с [`True`](https://python-all.ru/3.16/library/constants.html#True). Пример:13791380```console1381$ ./python -Xa=b -Xc1382Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)1383[GCC 4.4.3] on linux21384Type "help", "copyright", "credits" or "license" for more information.1385>>> import sys1386>>> sys._xoptions1387{'a': 'b', 'c': True}1388```13891390**Особенность реализации CPython:** Это специфичный для CPython способ доступа к параметрам, переданным через [`-X`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). Другие реализации могут экспортировать их другими средствами или не экспортировать вовсе.13911392Добавлено в версии 3.2.13931394Ссылки13951396\[[C99](https://python-all.ru/3.16/library/sys.html#id1)\]13971398ISO/IEC 9899:1999. «Programming languages – C». Публичный проект этого стандарта доступен по адресу [https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf](https://python-all.ru/3.16/library/sys.html).1399