sys.md
1> **Источник:** https://python-all.ru/3.1/library/sys.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 27.1. `sys` – системно-зависимые параметры и функции89Этот модуль предоставляет доступ к некоторым переменным, используемым или поддерживаемым интерпретатором, и к функциям, которые активно взаимодействуют с интерпретатором. Он всегда доступен.1011#### `sys.argv`1213Список аргументов командной строки, переданных скрипту Python. `argv[0]` – это имя скрипта (зависит от операционной системы, является ли оно полным путем или нет). Если команда была выполнена с использованием опции командной строки *-c* интерпретатора, `argv[0]` устанавливается в строку `'-c'`. Если имя скрипта не было передано интерпретатору Python, `argv[0]` является пустой строкой.1415Для итерации по стандартному вводу или списку файлов, переданных в командной строке, обратитесь к модулю [`fileinput`](https://python-all.ru/3.1/library/fileinput.html#module-fileinput).1617#### `sys.byteorder`1819Индикатор естественного порядка байтов. Значение равно2021`'big'`2223на платформах с обратным порядком (от старшего байта к младшему) и2425`'little'`2627на платформах с прямым порядком (от младшего байта к старшему).2829#### `sys.subversion`3031Тройка (repo, branch, version), представляющая информацию Subversion об интерпретаторе Python.3233*repo*3435– имя репозитория,3637`'CPython'`3839.4041*branch*4243– строка одного из видов4445`'trunk'`4647,4849`'branches/name'`5051или5253`'tags/name'`5455.5657*version*5859– вывод6061`svnversion`6263, если интерпретатор был собран из Subversion-рабочей копии; он содержит номер ревизии (диапазон) и, возможно, завершающую букву ‘M’, если были локальные изменения. Если дерево было экспортировано (или svnversion недоступен), то это ревизия6465`Include/patchlevel.h`6667, если ветка является тегом. В противном случае –6869`None`7071.7273#### `sys.builtin_module_names`7475Кортеж строк с именами всех модулей, вкомпилированных в данный интерпретатор Python. (Эту информацию нельзя получить иным способом –7677`modules.keys()`7879перечисляет только импортированные модули.)8081#### `sys.call_tracing(func, args)`8283Вызывает8485`func(*args)`8687, пока включена трассировка. Состояние трассировки сохраняется, а затем восстанавливается. Предназначен для вызова из отладчика из контрольной точки для рекурсивной отладки другого кода.8889#### `sys.copyright`9091Строка, содержащая сведения об авторских правах на интерпретатор Python.9293#### `sys._clear_type_cache()`9495Очищает внутренний кеш типов. Кеш типов используется для ускорения поиска атрибутов и методов. Эту функцию следует использовать *только* для удаления лишних ссылок при отладке утечек ссылок.9697Эту функцию следует использовать только для внутренних и специальных целей.9899#### `sys._current_frames()`100101Возвращает словарь, сопоставляющий идентификатор каждого потока самому верхнему фрейму стека, активному в этом потоке на момент вызова функции. Обратите внимание, что функции модуля [`traceback`](https://python-all.ru/3.1/library/traceback.html#module-traceback) могут построить стек вызовов, имея такой фрейм.102103Это особенно полезно для отладки взаимоблокировок: эта функция не требует содействия заблокированных потоков, и стеки вызовов таких потоков заморожены, пока они остаются заблокированными. Кадр, возвращённый для незаблокированного потока, может не соответствовать текущей активности этого потока, когда вызывающий код изучает кадр.104105Эту функцию следует использовать только для внутренних и специальных целей.106107#### `sys.dllhandle`108109Целое число, определяющее дескриптор DLL Python. Доступность: Windows.110111#### `sys.displayhook(value)`112113Если *value* не равно `None`, эта функция выводит его в `sys.stdout` и сохраняет в `builtins._`.114115`sys.displayhook` вызывается для результата вычисления [*выражения*](https://python-all.ru/3.1/glossary.html#term-expression), введённого в интерактивном сеансе Python. Отображение этих значений можно настроить, назначив другую функцию с одним аргументом на `sys.displayhook`.116117#### `sys.excepthook(type, value, traceback)`118119Эта функция выводит заданный traceback и исключение в `sys.stderr`.120121Когда возникает неперехваченное исключение, интерпретатор вызывает `sys.excepthook` с тремя аргументами: классом исключения, экземпляром исключения и объектом traceback. В интерактивном сеансе это происходит непосредственно перед возвратом управления к приглашению; в программе Python это происходит непосредственно перед выходом программы. Обработку таких исключений верхнего уровня можно настроить, назначив другую функцию с тремя аргументами на `sys.excepthook`.122123#### `sys.__displayhook__`124125#### `sys.__excepthook__`126127Эти объекты содержат исходные значения128129`displayhook`130131и132133`excepthook`134135в начале программы. Они сохраняются, чтобы136137`displayhook`138139и140141`excepthook`142143можно было восстановить, если они случайно будут заменены сломанными объектами.144145#### `sys.exc_info()`146147Эта функция возвращает кортеж из трёх значений, содержащих информацию об обрабатываемом в данный момент исключении. Возвращаемая информация относится как к текущему потоку, так и к текущему фрейму стека. Если текущий фрейм стека не обрабатывает исключение, информация берётся из вызывающего фрейма стека или его вызывающего, и так далее, пока не будет найден фрейм, обрабатывающий исключение. Здесь «обработка исключения» означает «выполнение блока except». Для любого фрейма стека доступна только информация об исключении, обрабатываемом в данный момент.148149Если ни одно исключение не обрабатывается нигде в стеке, возвращается кортеж из трёх значений `None`. В противном случае возвращаемые значения: `(type, value, traceback)`. Их смысл: *type* – это тип обрабатываемого исключения (подкласс [`BaseException`](https://python-all.ru/3.1/library/exceptions.html#BaseException)); *value* – экземпляр исключения (экземпляр типа исключения); *traceback* – объект traceback (см. справочное руководство), который инкапсулирует стек вызовов в точке, где изначально возникло исключение.150151> **Предупреждение**152>153> Присваивание возвращаемого значения *traceback* локальной переменной в функции, обрабатывающей исключение, приведёт к циклической ссылке. Поскольку большинству функций не нужен доступ к traceback, лучшим решением будет использовать что-то вроде `exctype, value = sys.exc_info()[:2]`, чтобы извлечь только тип и значение исключения. Если же traceback всё-таки нужен, обязательно удалите его после использования (лучше всего это сделать с помощью оператора [`try`](https://python-all.ru/3.1/reference/compound_stmts.html#try) ... [`finally`](https://python-all.ru/3.1/reference/compound_stmts.html#finally)) или вызовите [`exc_info()`](https://python-all.ru/3.1/library/sys.html#sys.exc_info) в функции, которая сама не обрабатывает исключение.154>155> Такие циклы обычно автоматически удаляются, когда сборка мусора включена и они становятся недостижимыми, но всё же более эффективно избегать создания циклов.156157#### `sys.exec_prefix`158159Строка, содержащая префикс каталога, специфичный для сайта, куда устанавливаются платформенно-зависимые файлы Python; по умолчанию это также160161`'/usr/local'`162163. Это может быть установлено во время сборки с помощью аргумента164165`--exec-prefix`166167скрипта168169**configure**170171. В частности, все конфигурационные файлы (например, заголовочный файл172173`pyconfig.h`174175) устанавливаются в каталог176177`exec_prefix + '/lib/pythonversion/config'`178179, а модули разделяемых библиотек устанавливаются в180181`exec_prefix + '/lib/pythonversion/lib-dynload'`182183, где184185*version*186187равно188189`version[:3]`190191.192193#### `sys.executable`194195Строка, содержащая имя исполняемого двоичного файла интерпретатора Python, на системах, где это имеет смысл.196197#### `sys.exit([arg])`198199Выход из Python. Реализуется путём возбуждения исключения [`SystemExit`](https://python-all.ru/3.1/library/exceptions.html#SystemExit), поэтому действия по очистке, указанные в предложениях finally операторов [`try`](https://python-all.ru/3.1/reference/compound_stmts.html#try), выполняются, и есть возможность перехватить попытку выхода на внешнем уровне.200201Необязательный аргумент *arg* может быть целым числом, задающим код возврата (по умолчанию ноль), или объектом другого типа. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение – «аварийным завершением» для оболочек и т.п. Большинство систем требуют, чтобы оно находилось в диапазоне 0–127, иначе результат не определён. В некоторых системах есть соглашения о назначении определённых значений определённым кодам возврата, но обычно они слабо проработаны; программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех остальных ошибок. Если передан объект другого типа, `None` эквивалентен нулю, а любой другой объект выводится в [`stderr`](https://python-all.ru/3.1/library/sys.html#sys.stderr) и приводит к коду возврата 1. В частности, `sys.exit("some error message")` – это быстрый способ завершить программу при возникновении ошибки.202203Поскольку [`exit()`](https://python-all.ru/3.1/library/constants.html#exit) в конечном счёте «всего лишь» возбуждает исключение, она завершит процесс только при вызове из главного потока и если исключение не будет перехвачено.204205#### `sys.flags`206207Структурная последовательность *flags* показывает состояние флагов командной строки. Атрибуты доступны только для чтения.208209| атрибут | флаг |210| --- | --- |211| `отладка` | [*-d*](https://python-all.ru/3.1/library/compileall.html#cmdoption-compileall-d) |212| `division_warning` | *-Q* |213| `inspect` | *-i* |214| `интерактивный` | *-i* |215| `optimize` | *-O* или *-OO* |216| [`dont_write_bytecode`](https://python-all.ru/3.1/library/sys.html#sys.dont_write_bytecode) | *-B* |217| `no_user_site` | \<*-s*\> |218| `no_site` | *-S* |219| `ignore_environment` | *-E* |220| `verbose` | \<*-v*\> |221| `bytes_warning` | \<*-b*\> |222| `hash_randomization` | *-R* |223224Новое в версии 3.1.5: Атрибут `hash_randomization`.225226#### `sys.float_info`227228Structseq, содержащая информацию о типе float. Содержит низкоуровневую информацию о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей запятой, определённым в стандартном заголовочном файле `float.h` для языка программирования C; подробнее см. раздел 5.2.4.2.2 стандарта ISO/IEC C 1999 года [\[C99\]](https://python-all.ru/3.1/library/sys.html#c99), «Характеристики типов с плавающей запятой».229230| атрибут | float.h макрос | объяснение |231| --- | --- | --- |232| `epsilon` | DBL\_EPSILON | разница между 1 и наименьшим значением, большим 1, которое может быть представлено как float |233| `dig` | DBL\_DIG | maximum number of decimal digits that can be faithfully represented in a float; see below |234| `mant_dig` | DBL\_MANT\_DIG | Точность float: количество цифр по основанию `radix` в мантиссе числа с плавающей запятой. |235| [`max`](https://python-all.ru/3.1/library/functions.html#max) | DBL\_MAX | максимальное представимое конечное число типа float |236| `max_exp` | DBL\_MAX\_EXP | максимальное целое e, для которого `radix**(e-1)` является представимым конечным числом с плавающей запятой. |237| `max_10_exp` | DBL\_MAX\_10\_EXP | максимальное целое e, для которого `10**e` находится в диапазоне представимых конечных чисел с плавающей запятой. |238| [`min`](https://python-all.ru/3.1/library/functions.html#min) | DBL\_MIN | минимальное положительное нормализованное число типа float |239| `min_exp` | DBL\_MIN\_EXP | минимальное целое e, для которого `radix**(e-1)` является нормализованным числом с плавающей запятой. |240| `min_10_exp` | DBL\_MIN\_10\_EXP | наименьшее целое e, такое что `10**e` является нормализованным числом с плавающей запятой |241| `основание системы счисления` | FLT\_RADIX | radix of exponent representation |242| `режим округления` | FLT\_ROUNDS | константа, представляющая режим округления, используемый для арифметических операций |243244Атрибут `sys.float_info.dig` требует дополнительного пояснения. Если `s` – это строка, представляющая десятичное число с не более чем `sys.float_info.dig` значащими цифрами, то преобразование `s` в float и обратно восстановит строку, представляющую то же десятичное значение:245246```python247>>> import sys248>>> sys.float_info.dig24915250>>> s = '3.14159265358979' # десятичная строка с 15 значащими цифрами251>>> format(float(s), '.15g') # Преобразование во float и обратно -> то же значение252'3.14159265358979'253```254255Но для строк с более чем `sys.float_info.dig` значащими цифрами это не всегда верно:256257```python258>>> s = '9876543211234567' # 16 значащих цифр – слишком много!259>>> format(float(s), '.16g') # преобразование изменяет значение260'9876543211234568'261```262263#### `sys.float_repr_style`264265Строка, указывающая, как функция [`repr()`](https://python-all.ru/3.1/library/functions.html#repr) ведет себя для чисел с плавающей запятой. Если строка имеет значение `'short'`, то для конечного числа с плавающей запятой `x` вызов `repr(x)` стремится выдать короткую строку со свойством, что `float(repr(x)) == x`. Это обычное поведение в Python 3.1 и новее. В противном случае `float_repr_style` имеет значение `'legacy'`, и `repr(x)` ведет себя так же, как в версиях Python до 3.1.266267Новое в версии 3.1.268269#### `sys.getcheckinterval()`270271Возвращает «интервал проверки» интерпретатора; см.272273[`setcheckinterval()`](https://python-all.ru/3.1/library/sys.html#sys.setcheckinterval)274275.276277#### `sys.getdefaultencoding()`278279Возвращает имя текущей кодировки строк по умолчанию, используемой реализацией Unicode.280281#### `sys.getdlopenflags()`282283Возвращает текущее значение флагов, используемых при вызовах284285`dlopen()`286287. Константы флагов определены в модулях288289[`ctypes`](https://python-all.ru/3.1/library/ctypes.html#module-ctypes)290291и292293`DLFCN`294295. Доступность: Unix.296297#### `sys.getfilesystemencoding()`298299Возвращает имя кодировки, используемой для преобразования имён файлов в Unicode в системные имена файлов, или `None`, если используется системная кодировка по умолчанию. Результирующее значение зависит от операционной системы:300301- В Mac OS X кодировка – `'utf-8'`.302- В Unix кодировка определяется предпочтением пользователя в соответствии с результатом nl\_langinfo(CODESET), или `None`, если `nl_langinfo(CODESET)` завершился неудачей.303- В Windows NT+ имена файлов изначально в Unicode, поэтому преобразование не выполняется. [`getfilesystemencoding()`](https://python-all.ru/3.1/library/sys.html#sys.getfilesystemencoding) по-прежнему возвращает `'mbcs'`, поскольку это кодировка, которую приложения должны использовать, когда они явно хотят преобразовать строки Unicode в байтовые строки, эквивалентные при использовании в качестве имен файлов.304- В Windows 9x кодировка – `'mbcs'`.305306#### `sys.getrefcount(object)`307308Возвращает счетчик ссылок объекта309310*object*311312. Возвращаемое значение обычно на единицу больше ожидаемого, поскольку включает (временную) ссылку на объект в качестве аргумента313314[`getrefcount()`](https://python-all.ru/3.1/library/sys.html#sys.getrefcount)315316.317318#### `sys.getrecursionlimit()`319320Возвращает текущее значение предела рекурсии – максимальной глубины стека интерпретатора Python. Этот предел предотвращает переполнение C-стека и аварийное завершение Python из-за бесконечной рекурсии. Его можно задать с помощью321322[`setrecursionlimit()`](https://python-all.ru/3.1/library/sys.html#sys.setrecursionlimit)323324.325326#### `sys.getsizeof(object[, default])`327328Возвращает размер объекта в байтах. Объект может быть любого типа. Все встроенные объекты возвращают корректные результаты, но для сторонних расширений это не обязательно – результат зависит от реализации.329330Если указан, *default* будет возвращен, если объект не предоставляет способа получения размера. В противном случае будет возбуждено [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError).331332[`getsizeof()`](https://python-all.ru/3.1/library/sys.html#sys.getsizeof) вызывает метод объекта `__sizeof__` и добавляет дополнительные накладные расходы сборщика мусора, если объект управляется сборщиком мусора.333334#### `sys._getframe([depth])`335336Возвращает объект фрейма из стека вызовов. Если указан необязательный целочисленный параметр *depth*, возвращается объект фрейма, находящийся на указанное количество вызовов ниже вершины стека. Если это глубже, чем стек вызовов, возбуждается [`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError). Значение по умолчанию для *depth* равно нулю, при этом возвращается фрейм на вершине стека вызовов.337338**Особенности реализации CPython:** Эта функция предназначена только для внутренних и специализированных целей. Она не гарантированно существует во всех реализациях Python.339340#### `sys.getprofile()`341342Возвращает функцию профилировщика, установленную с помощью [`setprofile()`](https://python-all.ru/3.1/library/sys.html#sys.setprofile).343344#### `sys.gettrace()`345346Возвращает функцию трассировки, установленную с помощью [`settrace()`](https://python-all.ru/3.1/library/sys.html#sys.settrace).347348**Особая деталь реализации CPython:** Функция [`gettrace()`](https://python-all.ru/3.1/library/sys.html#sys.gettrace) предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.349350#### `sys.getwindowsversion()`351352Возвращает кортеж из пяти компонентов, описывающих версию Windows, работающую в данный момент. Элементы: *major*, *minor*, *build*, *platform* и *text*. *text* содержит строку, а все остальные значения – целые числа.353354*platform* может принимать одно из следующих значений:355356| Константа | Платформа |357| --- | --- |358| `0 (VER_PLATFORM_WIN32s)` | Win32s на Windows 3.1 |359| `1 (VER_PLATFORM_WIN32_WINDOWS)` | Windows 95/98/ME |360| `2 (VER_PLATFORM_WIN32_NT)` | Windows NT/2000/XP/x64 |361| `3 (VER_PLATFORM_WIN32_CE)` | Windows CE |362363Эта функция обёртка над функцией Win32 `GetVersionEx()`; обратитесь к документации Microsoft для получения дополнительной информации об этих полях.364365Доступность: Windows.366367#### `sys.hexversion`368369Номер версии, закодированный в виде одного целого числа. Гарантируется, что он увеличивается с каждой версией, включая надлежащую поддержку непроизводственных выпусков. Например, чтобы проверить, что интерпретатор Python имеет версию не ниже 1.5.2, используйте:370371```python372if sys.hexversion >= 0x010502F0:373 # используйте некоторую продвинутую функцию374 ...375else:376 # используйте альтернативную реализацию или предупредите пользователя377 ...378```379380Оно называется `hexversion`, поскольку выглядит осмысленно только при передаче встроенной функции [`hex()`](https://python-all.ru/3.1/library/functions.html#hex). struct sequence [`sys.version_info`](https://python-all.ru/3.1/library/sys.html#sys.version_info) может использоваться для более удобочитаемого представления той же информации.381382`hexversion` – это 32-битное число со следующей структурой:383384| Биты (порядок big endian) | Значение |385| --- | --- |386| `1-8` | `PY_MAJOR_VERSION` (`2` в `2.1.0a3`) |387| `9-16` | `PY_MINOR_VERSION` (`1` в `2.1.0a3`) |388| `17-24` | `PY_MICRO_VERSION` (`0` в `2.1.0a3`) |389| `25-28` | `PY_RELEASE_LEVEL` (`0xA` для альфа-версии, `0xB` для бета-версии, `0xC` для версии-кандидата и `0xF` для финальной версии) |390| `29-32` | `PY_RELEASE_SERIAL` (`3` в `2.1.0a3`, ноль для финальных версий) |391392Таким образом, `2.1.0a3` имеет hexversion `0x020100a3`.393394#### `sys.int_info`395396struct sequence, содержащий информацию о внутреннем представлении целых чисел в Python. Атрибуты доступны только для чтения.397398| Атрибут | Пояснение |399| --- | --- |400| `bits_per_digit` | количество битов в каждом разряде. Целые числа Python хранятся внутри в системе с основанием `2**int_info.bits_per_digit` |401| `sizeof_digit` | размер в байтах типа C, используемого для представления разряда |402403Новое в версии 3.1.404405#### `sys.intern(string)`406407Помещает *строку* в таблицу «интернированных» строк и возвращает интернированную строку – *строку* (ту же самую или копию). Интернирование строк полезно для небольшого повышения производительности поиска в словаре: если ключи в словаре интернированы и искомый ключ интернирован, сравнение ключей (после хеширования) может выполняться сравнением указателей, а не строк. Обычно имена, используемые в программах Python, автоматически интернируются, и словари, используемые для хранения атрибутов модулей, классов или экземпляров, имеют интернированные ключи.408409Интернированные строки не бессмертны; необходимо сохранять ссылку на возвращаемое значение [`intern()`](https://python-all.ru/3.1/library/sys.html#sys.intern), чтобы пользоваться преимуществами интернирования.410411#### `sys.last_type`412413#### `sys.last_value`414415#### `sys.last_traceback`416417Эти три переменные определены не всегда; они устанавливаются, когда исключение не обработано и интерпретатор выводит сообщение об ошибке и трассировку стека. Предполагается, что они позволяют пользователю в интерактивном режиме импортировать модуль отладчика и заняться посмертной отладкой, не перезапуская команду, вызвавшую ошибку. (Типичное использование – `import pdb; pdb.pm()` для входа в посмертный отладчик; подробнее см. модуль [`pdb`](https://python-all.ru/3.1/library/pdb.html#module-pdb).)418419Смысл этих переменных такой же, как у возвращаемых значений [`exc_info()`](https://python-all.ru/3.1/library/sys.html#sys.exc_info), описанной выше.420421#### `sys.maxsize`422423Целое число, показывающее максимальное значение, которое может принимать переменная типа424425`Py_ssize_t`426427. Обычно это428429`2**31 - 1`430431на 32-битной платформе и432433`2**63 - 1`434435на 64-битной.436437#### `sys.maxunicode`438439Целое число, задающее наибольший поддерживаемый код символа Unicode. Его значение зависит от параметра конфигурации, указывающего, хранятся ли символы Unicode как UCS-2 или UCS-4.440441#### `sys.meta_path`442443Список объектов [*finder*](https://python-all.ru/3.1/glossary.html#term-finder), у которых вызывается метод `find_module()` чтобы проверить, может ли один из объектов найти импортируемый модуль. Метод `find_module()` вызывается как минимум с абсолютным именем импортируемого модуля. Если импортируемый модуль находится в пакете, то атрибут `__path__` родительского пакета передаётся в качестве второго аргумента. Метод возвращает `None`, если модуль не найден, иначе возвращает [*loader*](https://python-all.ru/3.1/glossary.html#term-loader).444445[`sys.meta_path`](https://python-all.ru/3.1/library/sys.html#sys.meta_path) просматривается до любых неявных поисковиков по умолчанию и до [`sys.path`](https://python-all.ru/3.1/library/sys.html#sys.path).446447See [**PEP 302**](https://python-all.ru/3.1/library/sys.html) for the original specification.448449#### `sys.modules`450451Это словарь, который сопоставляет имена модулей с уже загруженными модулями. Его можно использовать для принудительной перезагрузки модулей и других трюков.452453#### `sys.path`454455Список строк, задающих пути поиска модулей. Инициализируется из переменной окружения [**PYTHONPATH**](https://python-all.ru/3.1/using/cmdline.html#envvar-PYTHONPATH), дополненной значением по умолчанию, зависящим от установки.456457При запуске программы первый элемент этого списка, `path[0]`, содержит каталог со скриптом, который использовался для запуска интерпретатора Python. Если каталог скрипта недоступен (например, при интерактивном запуске интерпретатора или чтении скрипта со стандартного ввода), `path[0]` представляет собой пустую строку, что заставляет Python искать модули сначала в текущем каталоге. Обратите внимание, что каталог скрипта добавляется *перед* записями, добавляемыми в результате [**PYTHONPATH**](https://python-all.ru/3.1/using/cmdline.html#envvar-PYTHONPATH).458459Программа может свободно изменять этот список для своих целей.460461> **См. также**462>463> Модуль [`site`](https://python-all.ru/3.1/library/site.html#module-site) описывает, как использовать .pth-файлы для расширения [`sys.path`](https://python-all.ru/3.1/library/sys.html#sys.path).464465#### `sys.path_hooks`466467Список вызываемых объектов, которые принимают путь в качестве аргумента и пытаются создать для него [*искатель*](https://python-all.ru/3.1/glossary.html#term-finder). Если искатель может быть создан, вызываемый объект должен вернуть его; в противном случае возбуждается [`ImportError`](https://python-all.ru/3.1/library/exceptions.html#ImportError).468469Впервые описано в [**PEP 302**](https://python-all.ru/3.1/library/sys.html).470471#### `sys.path_importer_cache`472473Словарь, служащий кешем для объектов [*finder*](https://python-all.ru/3.1/glossary.html#term-finder). Ключами являются пути, переданные в [`sys.path_hooks`](https://python-all.ru/3.1/library/sys.html#sys.path_hooks), а значениями – найденные finder. Если путь является существующим путём файловой системы, но в [`sys.path_hooks`](https://python-all.ru/3.1/library/sys.html#sys.path_hooks) не найден явный finder, то сохраняется `None`, обозначающий, что следует использовать неявный finder по умолчанию. Если путь не существует, то устанавливается [`imp.NullImporter`](https://python-all.ru/3.1/library/imp.html#imp.NullImporter).474475Впервые описано в [**PEP 302**](https://python-all.ru/3.1/library/sys.html).476477#### `sys.platform`478479Эта строка содержит идентификатор платформы, который можно использовать, например, для добавления платформозависимых компонентов в [`sys.path`](https://python-all.ru/3.1/library/sys.html#sys.path).480481Для систем Unix это имя ОС в нижнем регистре, возвращаемое командой `uname -s`, с добавленной первой частью версии, возвращаемой командой `uname -r`, например `'sunos5'` или `'linux2'`, *на момент сборки Python*. Для других систем значения таковы:482483| Система | [`platform`](https://python-all.ru/3.1/library/sys.html#sys.platform) значение |484| --- | --- |485| Windows | `'win32'` |486| Windows/Cygwin | `'cygwin'` |487| Mac OS X | `'darwin'` |488| OS/2 | `'os2'` |489| OS/2 EMX | `'os2emx'` |490| AtheOS | `'atheos'` |491492#### `sys.prefix`493494Строка, задающая префикс каталога для конкретного сайта, куда устанавливаются не зависящие от платформы файлы Python; по умолчанию это строка495496`'/usr/local'`497498. Этот префикс можно задать во время сборки с помощью аргумента499500`--prefix`501502для скрипта503504**configure**505506. Основная коллекция библиотечных модулей Python устанавливается в каталог507508`prefix + '/lib/pythonversion'`509510, а не зависящие от платформы заголовочные файлы (все, кроме511512`pyconfig.h`513514) помещаются в515516`prefix + '/include/pythonversion'`517518, где519520*version*521522равно523524`version[:3]`525526.527528#### `sys.ps1`529530#### `sys.ps2`531532Строки, задающие основное и дополнительное приглашения интерпретатора. Они определены только в том случае, если интерпретатор работает в интерактивном режиме. Их начальные значения в этом случае – `'>>> '` и `'... '`. Если какой-либо из этих переменных присвоить нестроковый объект, его [`str()`](https://python-all.ru/3.1/library/functions.html#str) будет вычисляться заново каждый раз, когда интерпретатор готовится прочитать новую интерактивную команду; это можно использовать для реализации динамического приглашения.533534#### `sys.dont_write_bytecode`535536Если это истинно, Python не будет пытаться создавать файлы537538`.pyc`539540или541542`.pyo`543544при импорте исходных модулей. Изначально этому параметру присваивается545546`True`547548или549550`False`551552в зависимости от опции командной строки553554`-B`555556и переменной окружения557558`PYTHONDONTWRITEBYTECODE`559560, однако его можно задать самостоятельно для управления генерацией файлов байт-кода.561562#### `sys.setcheckinterval(interval)`563564Устанавливает «интервал проверки» интерпретатора. Это целочисленное значение определяет, как часто интерпретатор проверяет периодические события, такие как переключения потоков и обработчики сигналов. Значение по умолчанию –565566`100`567568, то есть проверка выполняется каждые 100 виртуальных инструкций Python. Установка большего значения может повысить производительность для программ, использующих потоки. Установка значения569570`<=`5715720 приводит к проверке каждой виртуальной инструкции, максимально повышая отзывчивость, но также и накладные расходы.573574#### `sys.setdefaultencoding(name)`575576Устанавливает текущую кодировку строк по умолчанию, используемую реализацией Unicode. Если577578*name*579580не соответствует ни одной доступной кодировке, вызывается581582[`LookupError`](https://python-all.ru/3.1/library/exceptions.html#LookupError)583584. Эта функция предназначена только для использования реализацией модуля585586[`site`](https://python-all.ru/3.1/library/site.html#module-site)587588и, при необходимости, модулем589590`sitecustomize`591592. После использования модулем593594[`site`](https://python-all.ru/3.1/library/site.html#module-site)595596она удаляется из пространства имён модуля597598`sys`599600.601602#### `sys.setdlopenflags(n)`603604Устанавливает флаги, используемые интерпретатором для вызовов605606`dlopen()`607608, например, при загрузке модулей расширений. В частности, это позволит выполнять ленивое разрешение символов при импорте модуля, если вызвать609610`sys.setdlopenflags(0)`611612. Для совместного использования символов между модулями расширений вызывайте613614`sys.setdlopenflags(ctypes.RTLD_GLOBAL)`615616. Символические имена флагов можно найти либо в модуле617618[`ctypes`](https://python-all.ru/3.1/library/ctypes.html#module-ctypes)619620, либо в модуле621622`DLFCN`623624. Если625626`DLFCN`627628недоступен, его можно сгенерировать из629630`/usr/include/dlfcn.h`631632с помощью скрипта633634**h2py**635636. Доступность: Unix.637638#### `sys.setfilesystemencoding(enc)`639640Устанавливает кодировку, используемую при преобразовании строк Python в имена файлов, равной641642*enc*643644. По умолчанию Python пытается самостоятельно определить подходящую кодировку на Unix; на Windows он полностью избегает такого преобразования. Эта функция может быть полезна, когда определение кодировки Python необходимо переопределить, например, если не все имена файлов на диске можно декодировать с использованием кодировки, выбранной Python.645646#### `sys.setprofile(profilefunc)`647648Устанавливает профилирующую функцию системы, что позволяет реализовать профилировщик исходного кода Python на самом Python. См. главу [*The Python Profilers*](https://python-all.ru/3.1/library/profile.html#profile) для получения дополнительной информации о профилировщике Python. Профилирующая функция системы вызывается аналогично системной трассирующей функции (см. [`settrace()`](https://python-all.ru/3.1/library/sys.html#sys.settrace)), но не вызывается для каждой выполняемой строки кода (только при вызове и возврате, при этом событие возврата сообщается даже в случае возникновения исключения). Функция привязана к потоку, но у профилировщика нет способа узнать о переключении контекста между потоками, поэтому использование этой функции в присутствии нескольких потоков не имеет смысла. Кроме того, её возвращаемое значение не используется, поэтому она может просто возвращать `None`.649650#### `sys.setrecursionlimit(limit)`651652Устанавливает максимальную глубину стека интерпретатора Python в *limit*. Этот предел предотвращает переполнение C-стека из-за бесконечной рекурсии и аварийное завершение Python.653654Максимально возможное значение предела зависит от платформы. Может потребоваться установить более высокий предел для программы, требующей глубокой рекурсии, если платформа это поддерживает. Делать это нужно осторожно, так как слишком высокий предел может привести к аварийному завершению.655656#### `sys.settrace(tracefunc)`657658Устанавливает трассирующую функцию системы, что позволяет реализовать отладчик исходного кода Python на самом Python. Функция привязана к потоку; чтобы отладчик поддерживал несколько потоков, её необходимо зарегистрировать с помощью [`settrace()`](https://python-all.ru/3.1/library/sys.html#sys.settrace) для каждого отлаживаемого потока.659660Трассирующие функции должны принимать три аргумента: *frame*, *event* и *arg*. *frame* – это текущий стековый фрейм. *event* – строка: `'call'`, `'line'`, `'return'`, `'исключение'`, `'c_call'`, `'c_return'` или `'c_exception'`. Значение *arg* зависит от типа события.661662Трассирующая функция вызывается (с *event*, установленным в `'call'`) всякий раз, когда входит в новую локальную область видимости; она должна возвращать ссылку на локальную трассирующую функцию для этой области или `None`, если область не нужно трассировать.663664Локальная трассирующая функция должна возвращать ссылку на саму себя (или на другую функцию для продолжения трассировки в этой области) или `None`, чтобы отключить трассировку в этой области.665666События имеют следующее значение:667668**`'call'`**669670Вызывается функция (или вход в другой блок кода). Вызывается глобальная трассирующая функция;671672*arg*673674равен675676`None`677678; возвращаемое значение указывает локальную трассирующую функцию.679680**`'line'`**681682Интерпретатор собирается выполнить новую строку кода (иногда на одной строке происходит несколько событий line). Вызывается локальная функция трассировки;683684*arg*685686равно687688`None`689690; возвращаемое значение задаёт новую локальную функцию трассировки.691692**`'return'`**693694Функция (или другой блок кода) собирается вернуть управление. Вызывается локальная трассирующая функция;695696*arg*697698– это значение, которое будет возвращено, или699700`None`701702, если событие вызвано возбуждённым исключением. Возвращаемое значение трассирующей функции игнорируется.703704**`'исключение'`**705706Произошло исключение. Вызывается локальная трассирующая функция;707708*arg*709710– это кортеж711712`(исключение, value, traceback)`713714; возвращаемое значение указывает новую локальную трассирующую функцию.715716**`'c_call'`**717718Готовится вызов C-функции. Это может быть функция расширения или встроенная функция.719720*arg*721722– это объект C-функции.723724**`'c_return'`**725726C-функция вернула результат.727728*arg*729730– это объект C-функции.731732**`'c_exception'`**733734C-функция возбудила исключение.735736*arg*737738– это объект C-функции.739740Обратите внимание, что при распространении исключения вниз по цепочке вызывающих объектов событие `'исключение'` генерируется на каждом уровне.741742Дополнительную информацию об объектах кода и фреймах см. в [*Стандартной иерархии типов*](https://python-all.ru/3.1/reference/datamodel.html#types).743744**Особенность реализации CPython:** Функция [`settrace()`](https://python-all.ru/3.1/library/sys.html#sys.settrace) предназначена только для реализации отладчиков, профилировщиков, инструментов измерения покрытия кода и тому подобного. Её поведение является частью конкретной реализации платформы, а не частью определения языка, и поэтому может быть недоступна во всех реализациях Python.745746#### `sys.settscdump(on_flag)`747748Включает дамп измерений виртуальной машины с использованием счётчика временных меток Pentium, если749750*on\_flag*751752истинно. Отключает эти дампы, если753754*on\_flag*755756ложно. Функция доступна только если Python был скомпилирован с757758`--with-tsc`759760. Чтобы понять вывод этого дампа, прочитайте761762`Python/ceval.c`763764в исходных кодах Python.765766#### `sys.stdin`767768#### `sys.stdout`769770#### `sys.stderr`771772[*Объекты-файлы*](https://python-all.ru/3.1/glossary.html#term-file-object), соответствующие стандартным потокам ввода, вывода и ошибок интерпретатора. `stdin` используется для всего ввода интерпретатора, кроме скриптов, включая вызовы [`input()`](https://python-all.ru/3.1/library/functions.html#input). `stdout` используется для вывода [`print()`](https://python-all.ru/3.1/library/functions.html#print) и инструкций [*expression*](https://python-all.ru/3.1/glossary.html#term-expression), а также для подсказок [`input()`](https://python-all.ru/3.1/library/functions.html#input). Собственные подсказки интерпретатора и (почти все) его сообщения об ошибках направляются в `stderr`. `stdout` и `stderr` не обязаны быть встроенными файловыми объектами: подойдёт любой объект, имеющий метод `write()`, принимающий строковый аргумент. (Изменение этих объектов не влияет на стандартные потоки ввода/вывода процессов, выполняемых через `os.popen()`, [`os.system()`](https://python-all.ru/3.1/library/os.html#os.system) или семейства функций `exec*()` в модуле [`os`](https://python-all.ru/3.1/library/os.html#module-os).)773774Стандартные потоки по умолчанию находятся в текстовом режиме. Для записи или чтения двоичных данных используйте соответствующий двоичный буфер. Например, чтобы записать байты в [`stdout`](https://python-all.ru/3.1/library/sys.html#sys.stdout), используйте `sys.stdout.buffer.write(b'abc')`. С помощью [`io.TextIOBase.detach()`](https://python-all.ru/3.1/library/io.html#io.TextIOBase.detach) потоки можно перевести в двоичный режим по умолчанию. Эта функция устанавливает [`stdin`](https://python-all.ru/3.1/library/sys.html#sys.stdin) и [`stdout`](https://python-all.ru/3.1/library/sys.html#sys.stdout) в двоичный режим:775776```python777def make_streams_binary():778 sys.stdin = sys.stdin.detach()779 sys.stdout = sys.stdout.detach()780```781782Обратите внимание, что потоки можно заменить объектами (например, [`io.StringIO`](https://python-all.ru/3.1/library/io.html#io.StringIO)), которые не поддерживают атрибут `buffer` или метод [`detach()`](https://python-all.ru/3.1/library/io.html#io.BufferedIOBase.detach) и могут вызывать [`AttributeError`](https://python-all.ru/3.1/library/exceptions.html#AttributeError) или [`io.UnsupportedOperation`](https://python-all.ru/3.1/library/io.html#io.UnsupportedOperation).783784#### `sys.__stdin__`785786#### `sys.__stdout__`787788#### `sys.__stderr__`789790Эти объекты содержат исходные значения `stdin`, `stderr` и `stdout` на момент запуска программы. Они используются при финализации и могут быть полезны для вывода в реальный стандартный поток независимо от того, был ли перенаправлен объект `sys.std*`.791792Его также можно использовать для восстановления реальных файлов до известных работающих файловых объектов, если они были перезаписаны некорректным объектом. Однако предпочтительный способ – явно сохранить предыдущий поток перед его заменой и восстановить сохранённый объект.793794> **Примечание**795>796> При некоторых условиях `stdin`, `stdout` и `stderr`, а также исходные значения `__stdin__`, `__stdout__` и `__stderr__` могут быть равны None. Обычно это характерно для Windows GUI-приложений, которые не подключены к консоли, и Python-приложений, запущенных с помощью **pythonw**.797798#### `sys.tracebacklimit`799800Когда этой переменной присвоено целое значение, она определяет максимальное количество уровней трассировки, выводимых при необработанном исключении. По умолчанию801802`1000`803804. Если установлено805806`0`807808или меньше, вся информация трассировки подавляется и выводятся только тип и значение исключения.809810#### `sys.version`811812Строка, содержащая номер версии интерпретатора Python, а также дополнительную информацию о номере сборки и используемом компиляторе. Эта строка отображается при запуске интерактивного интерпретатора. Не извлекайте информацию о версии из неё; вместо этого используйте813814[`version_info`](https://python-all.ru/3.1/library/sys.html#sys.version_info)815816и функции, предоставляемые модулем817818[`platform`](https://python-all.ru/3.1/library/platform.html#module-platform)819820.821822#### `sys.api_version`823824Версия C API для данного интерпретатора. Программисты могут счесть это полезным при отладке конфликтов версий между Python и модулями расширения.825826#### `sys.version_info`827828Кортеж, содержащий пять компонентов номера версии: *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` и так далее.829830Изменено в версии 3.1: Добавлены именованные атрибуты компонентов.831832#### `sys.warnoptions`833834Это деталь реализации инфраструктуры предупреждений; не изменяйте это значение. Обратитесь к модулю835836[`warnings`](https://python-all.ru/3.1/library/warnings.html#module-warnings)837838для получения дополнительной информации об инфраструктуре предупреждений.839840#### `sys.winver`841842Номер версии, используемый для формирования ключей реестра на платформах Windows. Он хранится как строковый ресурс 1000 в DLL Python. Обычно значение – это первые три символа843844[`version`](https://python-all.ru/3.1/library/sys.html#sys.version)845846. Он предоставляется в модуле847848`sys`849850в информационных целях; изменение этого значения не влияет на ключи реестра, используемые Python. Доступность: Windows.851852Ссылки853854| [\[C99\]](https://python-all.ru/3.1/library/sys.html#id1) | ISO/IEC 9899:1999. «Языки программирования – C». Публичный черновик этого стандарта доступен по адресу [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf](https://python-all.ru/3.1/library/sys.html). |855| --- | --- |856