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

sys.md

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

1> **Источник:** https://python-all.ru/3.5/library/sys.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 29.1. [`sys`](https://python-all.ru/3.5/library/sys.html#module-sys) – системно-зависимые параметры и функции89---1011Этот модуль предоставляет доступ к некоторым переменным, используемым или поддерживаемым интерпретатором, и к функциям, которые активно взаимодействуют с интерпретатором. Он всегда доступен.1213#### `sys.abiflags`1415В системах POSIX, где Python был собран с помощью стандартного скрипта `configure`, этот атрибут содержит флаги ABI, как указано в [**PEP 3149**](https://python-all.ru/3.5/library/sys.html).1617Новое в версии 3.2.1819#### `sys.argv`2021Список аргументов командной строки, переданных скрипту Python. `argv[0]` – это имя скрипта (зависит от операционной системы, является ли это полным именем пути или нет). Если команда была выполнена с использованием опции командной строки [`-c`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-c) интерпретатора, `argv[0]` устанавливается в строку `'-c'`. Если имя скрипта не было передано интерпретатору Python, `argv[0]` – пустая строка.2223Для циклического чтения стандартного ввода или списка файлов, переданных в командной строке, обратитесь к модулю [`fileinput`](https://python-all.ru/3.5/library/fileinput.html#module-fileinput).2425#### `sys.base_exec_prefix`2627Устанавливается во время запуска Python, до выполнения `site.py`, в то же значение, что и [`exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.exec_prefix). Если работа не ведётся в [виртуальном окружении](https://python-all.ru/3.5/library/venv.html#venv-def), значения останутся прежними; если `site.py` обнаруживает, что используется виртуальное окружение, значения [`prefix`](https://python-all.ru/3.5/library/sys.html#sys.prefix) и [`exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.exec_prefix) будут изменены так, чтобы указывать на виртуальное окружение, тогда как [`base_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_exec_prefix) останутся указывающими на базовую установку Python (ту, из которой было создано виртуальное окружение).2829Новое в версии 3.3.3031#### `sys.base_prefix`3233Устанавливается во время запуска Python, до выполнения `site.py`, в то же значение, что и [`prefix`](https://python-all.ru/3.5/library/sys.html#sys.prefix). Если работа не ведётся в [виртуальном окружении](https://python-all.ru/3.5/library/venv.html#venv-def), значения останутся прежними; если `site.py` обнаруживает, что используется виртуальное окружение, значения [`prefix`](https://python-all.ru/3.5/library/sys.html#sys.prefix) и [`exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.exec_prefix) будут изменены так, чтобы указывать на виртуальное окружение, тогда как [`base_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_exec_prefix) останутся указывающими на базовую установку Python (ту, из которой было создано виртуальное окружение).3435Новое в версии 3.3.3637#### `sys.byteorder`3839Индикатор естественного порядка байт. Имеет значение `'big'` на платформах с big-endian (от старшего байта к младшему) и `'little'` на платформах с little-endian (от младшего байта к старшему).4041#### `sys.builtin_module_names`4243Кортеж строк с именами всех модулей, скомпилированных в этот интерпретатор Python. (Эта информация недоступна никаким другим способом – `modules.keys()` перечисляет только импортированные модули.)4445#### `sys.call_tracing(func, args)`4647Вызывает `func(*args)` при включённой трассировке. Состояние трассировки сохраняется и восстанавливается после. Предназначено для вызова из отладчика из точки останова, чтобы рекурсивно отладить другой код.4849#### `sys.copyright`5051Строка, содержащая сведения об авторских правах на интерпретатор Python.5253#### `sys._clear_type_cache()`5455Очищает внутренний кеш типов. Кеш типов используется для ускорения поиска атрибутов и методов. Эту функцию следует использовать *только* для удаления лишних ссылок при отладке утечек ссылок.5657Эту функцию следует использовать только для внутренних и специальных целей.5859#### `sys._current_frames()`6061Возвращает словарь, отображающий идентификатор каждого потока на верхний кадр стека, активный в этом потоке на момент вызова функции. Обратите внимание, что функции модуля [`traceback`](https://python-all.ru/3.5/library/traceback.html#module-traceback) могут построить стек вызовов по такому кадру.6263Это особенно полезно для отладки взаимоблокировок: эта функция не требует содействия заблокированных потоков, и стеки вызовов таких потоков заморожены, пока они остаются заблокированными. Кадр, возвращённый для незаблокированного потока, может не соответствовать текущей активности этого потока, когда вызывающий код изучает кадр.6465Эту функцию следует использовать только для внутренних и специальных целей.6667#### `sys._debugmallocstats()`6869Выводит в stderr низкоуровневую информацию о состоянии распределителя памяти CPython.7071Если Python настроен с ключом –with-pydebug, он также выполняет некоторые дорогостоящие проверки внутренней согласованности.7273Новое в версии 3.3.7475**Особенность реализации CPython:** Эта функция специфична для CPython. Точный формат вывода здесь не определён и может измениться.7677#### `sys.dllhandle`7879Целое число, определяющее дескриптор DLL Python. Доступность: Windows.8081#### `sys.displayhook(value)`8283Если *value* не равно `None`, эта функция выводит `repr(value)` в `sys.stdout` и сохраняет *value* в `builtins._`. Если `repr(value)` не кодируется в `sys.stdout.encoding` с обработчиком ошибок `sys.stdout.errors` (который, вероятно, `'strict'`), он кодируется в `sys.stdout.encoding` с обработчиком ошибок `'backslashreplace'`.8485`sys.displayhook` вызывается для результата вычисления [выражения](https://python-all.ru/3.5/glossary.html#term-expression), введённого в интерактивном сеансе Python. Отображение этих значений можно настроить, присвоив другую функцию с одним аргументом `sys.displayhook`.8687Псевдокод:8889```python90def displayhook(value):91    if value is None:92        return93    # Установите '_' в None, чтобы избежать рекурсии94    builtins._ = None95    text = repr(value)96    try:97        sys.stdout.write(text)98    except UnicodeEncodeError:99        bytes = text.encode(sys.stdout.encoding, 'backslashreplace')100        if hasattr(sys.stdout, 'buffer'):101            sys.stdout.buffer.write(bytes)102        else:103            text = bytes.decode(sys.stdout.encoding, 'strict')104            sys.stdout.write(text)105    sys.stdout.write("\n")106    builtins._ = value107```108109Изменено в версии 3.2: Используется обработчик ошибок `'backslashreplace'` для [`UnicodeEncodeError`](https://python-all.ru/3.5/library/exceptions.html#UnicodeEncodeError).110111#### `sys.dont_write_bytecode`112113If 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.5/using/cmdline.html#id1) command line option and the [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE) environment variable, but you can set it yourself to control bytecode file generation.114115#### `sys.excepthook(type, value, traceback)`116117Эта функция выводит заданную трассировку и исключение в `sys.stderr`.118119Когда возникает необработанное исключение, интерпретатор вызывает `sys.excepthook` с тремя аргументами: класс исключения, экземпляр исключения и объект traceback. В интерактивном сеансе это происходит непосредственно перед возвратом управления в приглашение; в программе Python – перед завершением программы. Обработку таких исключений верхнего уровня можно настроить, присвоив другую функцию с тремя аргументами `sys.excepthook`.120121#### `sys.__displayhook__`122123#### `sys.__excepthook__`124125Эти объекты содержат исходные значения `displayhook` и `excepthook` в начале работы программы. Они сохраняются для того, чтобы `displayhook` и `excepthook` можно было восстановить, если вдруг они будут заменены повреждёнными объектами.126127#### `sys.exc_info()`128129Эта функция возвращает кортеж из трёх значений, содержащих информацию об обрабатываемом в данный момент исключении. Возвращаемая информация относится как к текущему потоку, так и к текущему фрейму стека. Если текущий фрейм стека не обрабатывает исключение, информация берётся из вызывающего фрейма стека или его вызывающего, и так далее, пока не будет найден фрейм, обрабатывающий исключение. Здесь «обработка исключения» означает «выполнение блока except». Для любого фрейма стека доступна только информация об исключении, обрабатываемом в данный момент.130131Если нигде в стеке не обрабатывается исключение, возвращается кортеж, содержащий три значения `None`. В противном случае возвращаются значения `(type, value, traceback)`. Их смысл: *type* получает тип обрабатываемого исключения (подкласс [`BaseException`](https://python-all.ru/3.5/library/exceptions.html#BaseException)); *value* получает экземпляр исключения (экземпляр типа исключения); *traceback* получает объект трассировки (см. справочное руководство), который инкапсулирует стек вызовов в точке, где изначально произошло исключение.132133#### `sys.exec_prefix`134135Строка, содержащая префикс директории, зависящий от сайта, в который устанавливаются платформозависимые файлы 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`.136137> **Примечание**138>139> Если [виртуальное окружение](https://python-all.ru/3.5/library/venv.html#venv-def) активно, это значение будет изменено в `site.py` так, чтобы указывать на виртуальное окружение. Значение для установки Python останется доступным через [`base_exec_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_exec_prefix).140141#### `sys.executable`142143Строка, содержащая абсолютный путь к исполняемому файлу интерпретатора Python на системах, где это имеет смысл. Если Python не может получить реальный путь к своему исполняемому файлу, [`sys.executable`](https://python-all.ru/3.5/library/sys.html#sys.executable) будет пустой строкой или `None`.144145#### `sys.exit([arg])`146147Выход из Python. Реализуется путём возбуждения исключения [`SystemExit`](https://python-all.ru/3.5/library/exceptions.html#SystemExit) , поэтому выполняются действия очистки, заданные в предложениях finally операторов [`try`](https://python-all.ru/3.5/reference/compound_stmts.html#try), и можно перехватить попытку выхода на внешнем уровне.148149Необязательный аргумент *arg* может быть целым числом, задающим статус выхода (по умолчанию ноль), или объектом другого типа. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение – «аварийным завершением» в оболочках и подобных системах. Большинство систем требуют, чтобы это значение находилось в диапазоне 0–127, иначе поведение не определено. В некоторых системах существует соглашение о присвоении определённых значений конкретным кодам выхода, но обычно такие соглашения слабо проработаны; программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех остальных ошибок. Если передан объект другого типа, `None` эквивалентен передаче нуля, а любой другой объект выводится в [`stderr`](https://python-all.ru/3.5/library/sys.html#sys.stderr) и приводит к коду выхода 1. В частности, `sys.exit("some error message")` – это быстрый способ завершить программу при возникновении ошибки.150151Поскольку [`exit()`](https://python-all.ru/3.5/library/constants.html#exit) в конечном счёте «лишь» возбуждает исключение, он завершит процесс только при вызове из главного потока, и исключение не будет перехвачено.152153#### `sys.flags`154155[struct sequence](https://python-all.ru/3.5/glossary.html#term-struct-sequence) *flags* предоставляет состояние флагов командной строки. Атрибуты доступны только для чтения.156157| атрибут | флаг |158| --- | --- |159| `debug` | [`-d`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-d) |160| [`inspect`](https://python-all.ru/3.5/library/inspect.html#module-inspect) | [`-i`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-i) |161| `interactive` | [`-i`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-i) |162| `optimize` | [`-O`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-o) или [`-OO`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-oo) |163| [`dont_write_bytecode`](https://python-all.ru/3.5/library/sys.html#sys.dont_write_bytecode) | [`-B`](https://python-all.ru/3.5/using/cmdline.html#id1) |164| `no_user_site` | [`-s`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-s) |165| `no_site` | [`-S`](https://python-all.ru/3.5/using/cmdline.html#id3) |166| `ignore_environment` | [`-E`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-e) |167| `verbose` | [`-v`](https://python-all.ru/3.5/using/cmdline.html#id4) |168| `bytes_warning` | [`-b`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-b) |169| `quiet` | [`-q`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-q) |170| `hash_randomization` | [`-R`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-r) |171172Изменено в версии 3.2: Добавлен атрибут `quiet` для нового флага [`-q`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-q).173174Новое в версии 3.2.3: Атрибут `hash_randomization`.175176Изменено в версии 3.3: Удалён устаревший атрибут `division_warning`.177178#### `sys.float_info`179180[Структурная последовательность](https://python-all.ru/3.5/glossary.html#term-struct-sequence), содержащая информацию о типе float. Она включает низкоуровневую информацию о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей точкой, определённым в стандартном заголовочном файле `float.h` для языка программирования «C»; подробнее см. раздел 5.2.4.2.2 стандарта ISO/IEC C 1999 года [\[C99\]](https://python-all.ru/3.5/library/sys.html#c99), «Характеристики типов с плавающей точкой».181182| атрибут | float.h макрос | объяснение |183| --- | --- | --- |184| `epsilon` | DBL\_EPSILON | разница между 1 и наименьшим значением, большим 1, которое может быть представлено как float |185| `dig` | DBL\_DIG | maximum number of decimal digits that can be faithfully represented in a float; see below |186| `mant_dig` | DBL\_MANT\_DIG | float precision: the number of base-`radix` digits in the significand of a float |187| [`max`](https://python-all.ru/3.5/library/functions.html#max) | DBL\_MAX | максимальное представимое конечное число типа float |188| `max_exp` | DBL\_MAX\_EXP | максимальное целое e, такое что `radix**(e-1)` является представимым конечным числом типа float |189| `max_10_exp` | DBL\_MAX\_10\_EXP | максимальное целое e, такое что `10**e` находится в диапазоне представимых конечных чисел с плавающей запятой |190| [`min`](https://python-all.ru/3.5/library/functions.html#min) | DBL\_MIN | минимальное положительное нормализованное число типа float |191| `min_exp` | DBL\_MIN\_EXP | минимальное целое e, такое что `radix**(e-1)` является нормализованным числом типа float |192| `min_10_exp` | DBL\_MIN\_10\_EXP | минимальное целое e, такое что `10**e` является нормализованным числом типа float |193| `radix` | FLT\_RADIX | radix of exponent representation |194| `rounds` | FLT\_ROUNDS | Целочисленная константа, представляющая режим округления, используемый для арифметических операций. Она отражает значение макроса системы FLT\_ROUNDS на момент запуска интерпретатора. См. раздел 5.2.4.2.2 стандарта C99 для объяснения возможных значений и их смысла. |195196Атрибут `sys.float_info.dig` требует дополнительного пояснения. Если `s` – любая строка, представляющая десятичное число не более чем с `sys.float_info.dig` значащими цифрами, то преобразование `s` в float и обратно даст строку, представляющую то же десятичное значение:197198```python199>>> import sys200>>> sys.float_info.dig20115202>>> s = '3.14159265358979'    # десятичная строка с 15 значащими цифрами203>>> format(float(s), '.15g')  # Преобразование во float и обратно -> то же значение204'3.14159265358979'205```206207Но для строк с более чем `sys.float_info.dig` значащими цифрами это верно не всегда:208209```python210>>> s = '9876543211234567'    # 16 значащих цифр – слишком много!211>>> format(float(s), '.16g')  # преобразование изменяет значение212'9876543211234568'213```214215#### `sys.float_repr_style`216217Строка, указывающая, как ведёт себя функция [`repr()`](https://python-all.ru/3.5/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.218219Новое в версии 3.1.220221#### `sys.getallocatedblocks()`222223Возвращает количество блоков памяти, выделенных в данный момент интерпретатором, независимо от их размера. Эта функция в основном полезна для отслеживания и отладки утечек памяти. Из-за внутренних кешей интерпретатора результат может меняться от вызова к вызову; возможно, потребуется вызвать [`_clear_type_cache()`](https://python-all.ru/3.5/library/sys.html#sys._clear_type_cache) и [`gc.collect()`](https://python-all.ru/3.5/library/gc.html#gc.collect), чтобы получить более предсказуемые результаты.224225Если сборка или реализация Python не может обоснованно вычислить эту информацию, [`getallocatedblocks()`](https://python-all.ru/3.5/library/sys.html#sys.getallocatedblocks) разрешено возвращать 0.226227Новое в версии 3.4.228229#### `sys.getcheckinterval()`230231Возвращает «интервал проверки» интерпретатора; см. [`setcheckinterval()`](https://python-all.ru/3.5/library/sys.html#sys.setcheckinterval).232233Устарело с версии 3.2: Используйте [`getswitchinterval()`](https://python-all.ru/3.5/library/sys.html#sys.getswitchinterval) вместо.234235#### `sys.getdefaultencoding()`236237Возвращает имя текущей кодировки строк по умолчанию, используемой реализацией Unicode.238239#### `sys.getdlopenflags()`240241Возвращает текущее значение флагов, используемых для вызовов `dlopen()`. Символические имена для значений флагов можно найти в модуле [`os`](https://python-all.ru/3.5/library/os.html#module-os) (константы `RTLD_xxx`, например [`os.RTLD_LAZY`](https://python-all.ru/3.5/library/os.html#os.RTLD_LAZY)). Доступность: Unix.242243#### `sys.getfilesystemencoding()`244245Возвращает название кодировки, используемой для преобразования имён файлов в кодировке Unicode в системные имена файлов. Результат зависит от операционной системы:246247- На Mac OS X кодировка – `'utf-8'`.248- В Unix кодировка определяется предпочтениями пользователя в соответствии с результатом nl\_langinfo(CODESET).249- В Windows NT+ имена файлов изначально в Unicode, поэтому преобразование не выполняется. [`getfilesystemencoding()`](https://python-all.ru/3.5/library/sys.html#sys.getfilesystemencoding) по-прежнему возвращает `'mbcs'`, так как это кодировка, которую приложения должны использовать, когда явно хотят преобразовать строки Unicode в байтовые строки, эквивалентные при использовании в качестве имён файлов.250- В Windows 9x кодировка – `'mbcs'`.251252Изменено в версии 3.2: результат [`getfilesystemencoding()`](https://python-all.ru/3.5/library/sys.html#sys.getfilesystemencoding) больше не может быть `None`.253254#### `sys.getrefcount(object)`255256Возвращает счётчик ссылок на *объект*. Возвращаемое значение обычно на единицу больше, чем можно ожидать, поскольку включает (временную) ссылку как аргумент [`getrefcount()`](https://python-all.ru/3.5/library/sys.html#sys.getrefcount).257258#### `sys.getrecursionlimit()`259260Возвращает текущее значение предела рекурсии – максимальную глубину стека интерпретатора Python. Этот предел предотвращает переполнение стека C и падение Python из-за бесконечной рекурсии. Его можно задать с помощью [`setrecursionlimit()`](https://python-all.ru/3.5/library/sys.html#sys.setrecursionlimit).261262#### `sys.getsizeof(object[, default])`263264Возвращает размер объекта в байтах. Объект может быть любого типа. Все встроенные объекты возвращают корректные результаты, но для сторонних расширений это не обязательно – результат зависит от реализации.265266Учитывается только память, непосредственно занимаемая объектом, а не память объектов, на которые он ссылается.267268Если задан параметр *default*, он будет возвращён в случае, если объект не предоставляет способа получить размер. В противном случае возбуждается [`TypeError`](https://python-all.ru/3.5/library/exceptions.html#TypeError).269270[`getsizeof()`](https://python-all.ru/3.5/library/sys.html#sys.getsizeof) вызывает метод `__sizeof__` объекта и добавляет дополнительную нагрузку сборщика мусора, если объект управляется сборщиком мусора.271272См. [рецепт рекурсивного sizeof](https://python-all.ru/3.5/library/sys.html) для примера использования [`getsizeof()`](https://python-all.ru/3.5/library/sys.html#sys.getsizeof) рекурсивно для определения размера контейнеров и всего их содержимого.273274#### `sys.getswitchinterval()`275276Возвращает «интервал переключения потоков» интерпретатора; см. [`setswitchinterval()`](https://python-all.ru/3.5/library/sys.html#sys.setswitchinterval).277278Новое в версии 3.2.279280#### `sys._getframe([depth])`281282Возвращает объект кадра из стека вызовов. Если задан необязательный целочисленный параметр *depth*, возвращается кадр, находящийся на указанное количество вызовов ниже вершины стека. Если это глубже, чем стек вызовов, возбуждается [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Значение по умолчанию для *depth* равно нулю – возвращается кадр на вершине стека вызовов.283284**Особенности реализации CPython:** Эта функция предназначена только для внутренних и специализированных целей. Она не гарантированно существует во всех реализациях Python.285286#### `sys.getprofile()`287288Возвращает профилирующую функцию, установленную с помощью [`setprofile()`](https://python-all.ru/3.5/library/sys.html#sys.setprofile).289290#### `sys.gettrace()`291292Возвращает трассировочную функцию, установленную с помощью [`settrace()`](https://python-all.ru/3.5/library/sys.html#sys.settrace).293294**Особенность реализации CPython:** Функция [`gettrace()`](https://python-all.ru/3.5/library/sys.html#sys.gettrace) предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.295296#### `sys.getwindowsversion()`297298Возвращает именованный кортеж с информацией о текущей версии Windows. Именованные элементы: *major*, *minor*, *build*, *platform*, *service\_pack*, *service\_pack\_minor*, *service\_pack\_major*, *suite\_mask* и *product\_type*. *service\_pack* содержит строку, а все остальные значения – целые числа. Доступ к компонентам возможен также по имени, так что `sys.getwindowsversion()[0]` эквивалентно `sys.getwindowsversion().major`. Для совместимости с предыдущими версиями по индексу доступны только первые 5 элементов.299300*platform* может принимать одно из следующих значений:301302| Константа | Платформа |303| --- | --- |304| `0 (VER_PLATFORM_WIN32s)` | Win32s on Windows 3.1 |305| `1 (VER_PLATFORM_WIN32_WINDOWS)` | Windows 95/98/ME |306| `2 (VER_PLATFORM_WIN32_NT)` | Windows NT/2000/XP/x64 |307| `3 (VER_PLATFORM_WIN32_CE)` | Windows CE |308309*product\_type* может быть одним из следующих значений:310311| Константа | Значение |312| --- | --- |313| `1 (VER_NT_WORKSTATION)` | Система является рабочей станцией. |314| `2 (VER_NT_DOMAIN_CONTROLLER)` | Система является контроллером домена. |315| `3 (VER_NT_SERVER)` | Система является сервером, но не контроллером домена. |316317Эта функция является обёрткой над функцией Win32 `GetVersionEx()`; см. документацию Microsoft по `OSVERSIONINFOEX()` для получения дополнительных сведений об этих полях.318319Доступность: Windows.320321Изменено в версии 3.2: Изменён на именованный кортеж и добавлены *service\_pack\_minor*, *service\_pack\_major*, *suite\_mask* и *product\_type*.322323#### `sys.get_coroutine_wrapper()`324325Возвращает `None` или обёртку, установленную [`set_coroutine_wrapper()`](https://python-all.ru/3.5/library/sys.html#sys.set_coroutine_wrapper).326327Новое в версии 3.5: См. [**PEP 492**](https://python-all.ru/3.5/library/sys.html) для получения дополнительной информации.328329> **Примечание**330>331> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.5/library/sys.html) для подробностей). Используйте её только для целей отладки.332333#### `sys.hash_info`334335[struct sequence](https://python-all.ru/3.5/glossary.html#term-struct-sequence), предоставляющий параметры реализации числового хеша. Для более подробной информации о хешировании числовых типов см. [Хеширование числовых типов](https://python-all.ru/3.5/library/stdtypes.html#numeric-hash).336337| атрибут | объяснение |338| --- | --- |339| `width` | разрядность в битах, используемая для хеш-значений |340| `modulus` | простой модуль P, используемый для числовой схемы хеширования |341| `inf` | хэш-значение, возвращаемое для положительной бесконечности |342| `nan` | значение хэша, возвращаемое для nan |343| `imag` | множитель для мнимой части комплексного числа |344| `algorithm` | имя алгоритма хэширования для str, bytes и memoryview |345| `hash_bits` | внутренний размер вывода алгоритма хэширования |346| `seed_bits` | размер ключа начальной инициализации (seed) алгоритма хэширования |347348Новое в версии 3.2.349350Изменено в версии 3.4: добавлены *algorithm*, *hash\_bits* и *seed\_bits*351352#### `sys.hexversion`353354Номер версии, закодированный в виде одного целого числа. Гарантируется, что он увеличивается с каждой версией, включая надлежащую поддержку непроизводственных выпусков. Например, чтобы проверить, что интерпретатор Python имеет версию не ниже 1.5.2, используйте:355356```python357if sys.hexversion >= 0x010502F0:358    # используйте некоторую продвинутую функцию359    ...360else:361    # используйте альтернативную реализацию или предупредите пользователя362    ...363```364365Это называется `hexversion`, поскольку оно действительно имеет смысл только при просмотре как результат передачи его встроенной функции [`hex()`](https://python-all.ru/3.5/library/functions.html#hex). [struct sequence](https://python-all.ru/3.5/glossary.html#term-struct-sequence) [`sys.version_info`](https://python-all.ru/3.5/library/sys.html#sys.version_info) может использоваться для более удобочитаемого кодирования той же информации.366367Более подробная информация о `hexversion` доступна на [API and ABI Versioning](https://python-all.ru/3.5/c-api/apiabiversion.html#apiabiversion).368369#### `sys.implementation`370371Объект, содержащий информацию о реализации текущего интерпретатора Python. Следующие атрибуты должны существовать во всех реализациях Python.372373*name* – идентификатор реализации, например `'cpython'`. Фактическая строка определяется реализацией Python, но гарантированно состоит из строчных букв.374375*version* – это именованный кортеж в том же формате, что и [`sys.version_info`](https://python-all.ru/3.5/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 они совпадают, так как это эталонная реализация.376377*hexversion* – это версия реализации в шестнадцатеричном формате, например [`sys.hexversion`](https://python-all.ru/3.5/library/sys.html#sys.hexversion).378379*cache\_tag* – это тег, используемый механизмом импорта в именах файлов кэшированных модулей. По соглашению, он представляет собой комбинацию имени и версии реализации, например `'cpython-33'`. Однако реализация Python может использовать другое значение, если это уместно. Если `cache_tag` установлено в `None`, это означает, что кэширование модулей должно быть отключено.380381[`sys.implementation`](https://python-all.ru/3.5/library/sys.html#sys.implementation) может содержать дополнительные атрибуты, специфичные для реализации Python. Эти нестандартные атрибуты должны начинаться с подчеркивания и не описываются здесь. Независимо от содержимого, [`sys.implementation`](https://python-all.ru/3.5/library/sys.html#sys.implementation) не будет изменяться во время работы интерпретатора, а также между версиями реализации. (Однако он может измениться между версиями языка Python.) Смотри [**PEP 421**](https://python-all.ru/3.5/library/sys.html) для получения дополнительной информации.382383Новое в версии 3.3.384385#### `sys.int_info`386387[struct sequence](https://python-all.ru/3.5/glossary.html#term-struct-sequence), содержащий информацию о внутреннем представлении целых чисел в Python. Атрибуты доступны только для чтения.388389| Атрибут | Пояснение |390| --- | --- |391| `bits_per_digit` | количество бит в каждом разряде. Целые числа Python хранятся внутри в системе с основанием `2**int_info.bits_per_digit` |392| `sizeof_digit` | размер в байтах типа C, используемого для представления разряда |393394Новое в версии 3.1.395396#### `sys.__interactivehook__`397398Когда этот атрибут существует, его значение автоматически вызывается (без аргументов) при запуске интерпретатора в [интерактивном режиме](https://python-all.ru/3.5/tutorial/interpreter.html#tut-interactive). Это происходит после чтения файла [`PYTHONSTARTUP`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONSTARTUP), чтобы можно было установить этот перехватчик там. Модуль [`site`](https://python-all.ru/3.5/library/site.html#module-site) [устанавливает это](https://python-all.ru/3.5/library/site.html#rlcompleter-config).399400Новое в версии 3.4.401402#### `sys.intern(string)`403404Помещает *строку* в таблицу «интернированных» строк и возвращает интернированную строку – *строку* (ту же самую или копию). Интернирование строк полезно для небольшого повышения производительности поиска в словаре: если ключи в словаре интернированы и искомый ключ интернирован, сравнение ключей (после хеширования) может выполняться сравнением указателей, а не строк. Обычно имена, используемые в программах Python, автоматически интернируются, и словари, используемые для хранения атрибутов модулей, классов или экземпляров, имеют интернированные ключи.405406Интернированные строки не бессмертны; необходимо сохранять ссылку на возвращаемое значение [`intern()`](https://python-all.ru/3.5/library/sys.html#sys.intern), чтобы воспользоваться этим.407408#### `sys.is_finalizing()`409410Возвращает [`True`](https://python-all.ru/3.5/library/constants.html#True), если интерпретатор Python [завершает работу](https://python-all.ru/3.5/glossary.html#term-interpreter-shutdown), иначе [`False`](https://python-all.ru/3.5/library/constants.html#False).411412Новое в версии 3.5.413414#### `sys.last_type`415416#### `sys.last_value`417418#### `sys.last_traceback`419420Эти три переменные определены не всегда; они устанавливаются, когда исключение не обработано и интерпретатор выводит сообщение об ошибке и трассировку стека. Их предназначение – позволить интерактивному пользователю импортировать модуль отладчика и заняться посмертной отладкой без необходимости повторно выполнять команду, вызвавшую ошибку. (Типичное использование – `import pdb; pdb.pm()` для входа в посмертный отладчик; см. модуль [`pdb`](https://python-all.ru/3.5/library/pdb.html#module-pdb) для получения дополнительной информации.)421422Смысл этих переменных такой же, как у возвращаемых значений [`exc_info()`](https://python-all.ru/3.5/library/sys.html#sys.exc_info) выше.423424#### `sys.maxsize`425426Целое число, задающее максимальное значение, которое может принимать переменная типа `Py_ssize_t`. Обычно это `2**31 - 1` на 32-битной платформе и `2**63 - 1` на 64-битной платформе.427428#### `sys.maxunicode`429430Целое число, задающее значение самого большого кодового пункта Unicode, то есть `1114111` (`0x10FFFF` в шестнадцатеричной записи).431432Изменено в версии 3.3: До [**PEP 393**](https://python-all.ru/3.5/library/sys.html), `sys.maxunicode` был либо `0xFFFF`, либо `0x10FFFF`, в зависимости от параметра конфигурации, определявшего, хранятся ли символы Unicode как UCS-2 или UCS-4.433434#### `sys.meta_path`435436Список объектов [мета-искателя путей](https://python-all.ru/3.5/glossary.html#term-meta-path-finder), чьи методы [`find_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder.find_spec) вызываются для проверки, может ли один из объектов найти импортируемый модуль. Метод [`find_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder.find_spec) вызывается по крайней мере с абсолютным именем импортируемого модуля. Если импортируемый модуль содержится в пакете, то в качестве второго аргумента передаётся атрибут [`__path__`](https://python-all.ru/3.5/reference/import.html#__path__) родительского пакета. Метод возвращает [спецификацию модуля](https://python-all.ru/3.5/glossary.html#term-module-spec) или `None`, если модуль не найден.437438> **См. также**439>440> **[`importlib.abc.MetaPathFinder`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder)**441>442> Абстрактный базовый класс, определяющий интерфейс объектов-искателей на443>444> [`meta_path`](https://python-all.ru/3.5/library/sys.html#sys.meta_path)445>446> .447>448> **[`importlib.machinery.ModuleSpec`](https://python-all.ru/3.5/library/importlib.html#importlib.machinery.ModuleSpec)**449>450> Конкретный класс, экземпляры которого должен возвращать451>452> [`find_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder.find_spec)453>454> .455456Изменено в версии 3.4: [Спецификации модулей](https://python-all.ru/3.5/glossary.html#term-module-spec) были введены в Python 3.4, [**PEP 451**](https://python-all.ru/3.5/library/sys.html). В более ранних версиях Python искался метод с именем [`find_module()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder.find_module). Он по-прежнему вызывается как запасной вариант, если запись [`meta_path`](https://python-all.ru/3.5/library/sys.html#sys.meta_path) не имеет метода [`find_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.MetaPathFinder.find_spec).457458#### `sys.modules`459460Это словарь, сопоставляющий имена модулей с уже загруженными модулями. С его помощью можно принудительно перезагружать модули и выполнять другие трюки. Однако замена словаря не обязательно сработает как ожидается, а удаление важных элементов из словаря может привести к сбою Python.461462#### `sys.path`463464Список строк, задающий путь поиска модулей. Инициализируется из переменной окружения [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH), а также из специфичного для установки значения по умолчанию.465466При инициализации при запуске программы первый элемент этого списка, `path[0]`, содержит каталог со скриптом, который был использован для вызова интерпретатора Python. Если каталог скрипта недоступен (например, если интерпретатор запущен в интерактивном режиме или скрипт читается из стандартного ввода), `path[0]` является пустой строкой, что заставляет Python сначала искать модули в текущем каталоге. Обратите внимание, что каталог скрипта вставляется *до* записей, добавленных в результате [`PYTHONPATH`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONPATH)467468Программа может изменять этот список для своих целей. В [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path) следует добавлять только строки и байты; все остальные типы данных игнорируются при импорте469470> **См. также**471>472> Модуль [`site`](https://python-all.ru/3.5/library/site.html#module-site). Здесь описывается, как использовать .pth-файлы для расширения [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path)473474#### `sys.path_hooks`475476Список вызываемых объектов, которые принимают аргумент-путь и пытаются создать [искатель](https://python-all.ru/3.5/glossary.html#term-finder) для этого пути. Если искатель может быть создан, вызываемый объект должен вернуть его, иначе – возбудить [`ImportError`](https://python-all.ru/3.5/library/exceptions.html#ImportError).477478Впервые описано в [**PEP 302**](https://python-all.ru/3.5/library/sys.html).479480#### `sys.path_importer_cache`481482Словарь, выступающий в роли кэша для объектов [finder](https://python-all.ru/3.5/glossary.html#term-finder). Ключами являются пути, переданные в [`sys.path_hooks`](https://python-all.ru/3.5/library/sys.html#sys.path_hooks), а значениями – найденные finder'ы. Если путь является корректным файловым системным путём, но на [`sys.path_hooks`](https://python-all.ru/3.5/library/sys.html#sys.path_hooks) не найден ни один finder, то сохраняется `None`.483484Впервые описано в [**PEP 302**](https://python-all.ru/3.5/library/sys.html).485486Изменено в версии 3.3: `None` сохраняется вместо [`imp.NullImporter`](https://python-all.ru/3.5/library/imp.html#imp.NullImporter), когда finder не найден.487488#### `sys.platform`489490Эта строка содержит идентификатор платформы, который можно использовать, например, для добавления платформозависимых компонентов к [`sys.path`](https://python-all.ru/3.5/library/sys.html#sys.path).491492Для систем Unix, кроме Linux, это имя ОС в нижнем регистре, возвращаемое `uname -s`, с добавлением первой части версии, возвращаемой `uname -r`, например `'sunos5'` или `'freebsd8'`, *на момент сборки Python*. Если не требуется проверять конкретную версию системы, рекомендуется использовать следующий идиоматический приём:493494```python495if sys.platform.startswith('freebsd'):496    # Код, специфичный для FreeBSD, здесь...497elif sys.platform.startswith('linux'):498    # Код, специфичный для Linux...499```500501Для остальных систем значения следующие:502503| Система | `platform` значение |504| --- | --- |505| Linux | `'linux'` |506| Windows | `'win32'` |507| Windows/Cygwin | `'cygwin'` |508| Mac OS X | `'darwin'` |509510Изменено в версии 3.3: В Linux [`sys.platform`](https://python-all.ru/3.5/library/sys.html#sys.platform) больше не содержит основной номер версии. Теперь это всегда `'linux'`, а не `'linux2'` или `'linux3'`. Поскольку более старые версии Python включали номер версии, рекомендуется всегда использовать `startswith` идиоматический код, представленный выше.511512> **См. также**513>514> [`os.name`](https://python-all.ru/3.5/library/os.html#os.name) имеет более грубую гранулярность. [`os.uname()`](https://python-all.ru/3.5/library/os.html#os.uname) выдаёт зависящую от системы информацию о версии.515>516> Модуль [`platform`](https://python-all.ru/3.5/library/platform.html#module-platform) предоставляет подробные проверки идентификации системы.517518#### `sys.prefix`519520Строка, содержащая префикс каталога, специфичный для узла, в который устанавливаются платформенно-независимые файлы Python; по умолчанию это строка `'/usr/local'`. Этот префикс можно задать при сборке с помощью аргумента `--prefix` сценария **configure**. Основная коллекция модулей библиотеки Python устанавливается в каталог `prefix/lib/pythonX.Y`, а платформенно-независимые заголовочные файлы (все, кроме `pyconfig.h`) хранятся в `prefix/include/pythonX.Y`, где *X.Y* – номер версии Python, например `3.2`.521522> **Примечание**523>524> Если [виртуальное окружение](https://python-all.ru/3.5/library/venv.html#venv-def) активно, это значение изменится в `site.py`, чтобы указывать на виртуальное окружение. Значение для установки Python по-прежнему будет доступно через [`base_prefix`](https://python-all.ru/3.5/library/sys.html#sys.base_prefix).525526#### `sys.ps1`527528#### `sys.ps2`529530Строки, задающие основное и дополнительное приглашения интерпретатора. Они определены только в интерактивном режиме. Их начальные значения в этом случае – `'>>> '` и `'... '`. Если одной из этих переменных присвоить объект, не являющийся строкой, его [`str()`](https://python-all.ru/3.5/library/stdtypes.html#str) будет вычисляться заново каждый раз, когда интерпретатор готовится читать новую интерактивную команду; это можно использовать для реализации динамического приглашения.531532#### `sys.setcheckinterval(interval)`533534Устанавливает «интервал проверки» интерпретатора. Это целочисленное значение определяет, как часто интерпретатор проверяет периодические события, такие как переключения потоков и обработчики сигналов. Значение по умолчанию – `100`, то есть проверка выполняется каждые 100 виртуальных инструкций Python. Установка большего значения может повысить производительность для программ, использующих потоки. Установка значения `<=` 0 приводит к проверке каждой виртуальной инструкции, максимально повышая отзывчивость, но также и накладные расходы.535536Устарело с версии 3.2: Эта функция больше не действует, так как внутренняя логика переключения потоков и асинхронных задач была переписана. Используйте [`setswitchinterval()`](https://python-all.ru/3.5/library/sys.html#sys.setswitchinterval) вместо неё.537538#### `sys.setdlopenflags(n)`539540Устанавливает флаги, используемые интерпретатором для вызовов `dlopen()`, например, при загрузке модулей расширений. В частности, это включает отложенное разрешение символов при импорте модуля, если вызвано как `sys.setdlopenflags(0)`. Чтобы обмениваться символами между модулями расширений, вызывайте как `sys.setdlopenflags(os.RTLD_GLOBAL)`. Символические имена значений флагов можно найти в модуле [`os`](https://python-all.ru/3.5/library/os.html#module-os) (константы `RTLD_xxx`, например [`os.RTLD_LAZY`](https://python-all.ru/3.5/library/os.html#os.RTLD_LAZY)).541542Доступность: Unix.543544#### `sys.setprofile(profilefunc)`545546Устанавливает профилирующую функцию системы, которая позволяет реализовать профилировщик исходного кода Python на Python. См. главу [Профилировщики Python](https://python-all.ru/3.5/library/profile.html#profile) для получения дополнительной информации о профилировщике Python. Системная профилирующая функция вызывается аналогично системной трассирующей функции (см. [`settrace()`](https://python-all.ru/3.5/library/sys.html#sys.settrace)), но не вызывается для каждой выполненной строки кода (только при вызове и возврате, причём событие возврата сообщается даже при установленном исключении). Функция привязана к потоку, но у профилировщика нет способа узнать о переключении контекста между потоками, поэтому использовать её в присутствии нескольких потоков не имеет смысла. Кроме того, её возвращаемое значение не используется, поэтому она может просто возвращать `None`.547548#### `sys.setrecursionlimit(limit)`549550Устанавливает максимальную глубину стека интерпретатора Python в *limit*. Этот предел предотвращает переполнение C-стека из-за бесконечной рекурсии и аварийное завершение Python.551552Максимально возможный предел зависит от платформы. Пользователь может увеличить предел, если программа требует глубокой рекурсии, а платформа поддерживает более высокий предел. Это следует делать с осторожностью, так как слишком высокий предел может привести к аварийному завершению.553554Если новый предел слишком мал для текущей глубины рекурсии, возбуждается исключение [`RecursionError`](https://python-all.ru/3.5/library/exceptions.html#RecursionError).555556Изменено в версии 3.5.1: Теперь возбуждается исключение [`RecursionError`](https://python-all.ru/3.5/library/exceptions.html#RecursionError), если новый предел слишком мал для текущей глубины рекурсии.557558#### `sys.setswitchinterval(interval)`559560Устанавливает интервал переключения потоков интерпретатора (в секундах). Это значение с плавающей точкой определяет идеальную длительность «квантов времени», выделяемых одновременно работающим потокам Python. Обратите внимание, что фактическое значение может быть больше, особенно при использовании долго выполняющихся внутренних функций или методов. Кроме того, какой поток будет запланирован по окончании интервала, решает операционная система – у интерпретатора нет собственного планировщика.561562Новое в версии 3.2.563564#### `sys.settrace(tracefunc)`565566Задаёт системную трассировочную функцию, с помощью которой можно реализовать отладчик исходного кода Python на самом Python. Функция привязана к потоку; чтобы отладчик поддерживал несколько потоков, её нужно зарегистрировать с помощью [`settrace()`](https://python-all.ru/3.5/library/sys.html#sys.settrace) для каждого отлаживаемого потока.567568Трассирующие функции должны иметь три аргумента: *frame*, *event* и *arg*. *frame* – это текущий стековый кадр. *event* – это строка: `'call'`, `'line'`, `'return'`, `'exception'`, `'c_call'`, `'c_return'` или `'c_exception'`. *arg* зависит от типа события.569570Трассировочная функция вызывается (с *event*, равным `'call'`) всякий раз, когда происходит вход в новую локальную область видимости; она должна вернуть ссылку на локальную трассировочную функцию для этой области или `None`, если область не нужно трассировать.571572Локальная трассировочная функция должна возвращать ссылку на себя (или на другую функцию для дальнейшей трассировки в этой области видимости) или `None` для отключения трассировки в этой области573574События имеют следующее значение:575576**`'call'`**577578Функция вызвана (или начат другой блок кода). Вызывается глобальная функция трассировки;579580*arg*581582равно583584`None`585586; возвращаемое значение задаёт локальную функцию трассировки.587588**`'line'`**589590Интерпретатор собирается выполнить новую строку кода или повторно вычислить условие цикла. Вызывается локальная трассировочная функция;591592*arg*593594равен595596`None`597598; возвращаемое значение задаёт новую локальную трассировочную функцию. Подробное объяснение работы см. в599600`Objects/lnotab_notes.txt`601602.603604**`'return'`**605606Функция (или другой блок кода) собирается вернуть значение. Вызывается локальная функция трассировки;607608*arg*609610– это значение, которое будет возвращено, или611612`None`613614, если событие вызвано возбуждённым исключением. Возвращаемое значение функции трассировки игнорируется.615616**`'exception'`**617618Произошло исключение. Вызывается локальная функция трассировки;619620*arg*621622– это кортеж623624`(exception, value, traceback)`625626; возвращаемое значение задаёт новую локальную функцию трассировки.627628**`'c_call'`**629630Готовится вызов C-функции. Это может быть функция расширения или встроенная функция.631632*arg*633634– это объект C-функции.635636**`'c_return'`**637638C-функция вернула результат.639640*arg*641642– это объект C-функции.643644**`'c_exception'`**645646C-функция возбудила исключение.647648*arg*649650– это объект C-функции.651652Обратите внимание, что при распространении исключения по цепочке вызывающих на каждом уровне генерируется событие `'exception'`.653654Дополнительную информацию об объектах кода и фреймах см. в [Стандартной иерархии типов](https://python-all.ru/3.5/reference/datamodel.html#types).655656**Особенность реализации CPython:** Функция [`settrace()`](https://python-all.ru/3.5/library/sys.html#sys.settrace) предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.657658#### `sys.settscdump(on_flag)`659660Включает дамп измерений виртуальной машины с использованием счётчика временных меток Pentium, если *on\_flag* истинен. Отключает эти дампы, если *on\_flag* выключен. Функция доступна только если Python был скомпилирован с `--with-tsc`. Чтобы понять вывод этого дампа, прочитайте `Python/ceval.c` в исходниках Python.661662**Особенность реализации CPython:** Эта функция тесно привязана к внутренним деталям CPython и вряд ли будет реализована в других интерпретаторах.663664#### `sys.set_coroutine_wrapper(wrapper)`665666Позволяет перехватывать создание объектов [корутина](https://python-all.ru/3.5/glossary.html#term-coroutine) (только тех, которые создаются функцией [`async def`](https://python-all.ru/3.5/reference/compound_stmts.html#async-def); генераторы, декорированные [`types.coroutine()`](https://python-all.ru/3.5/library/types.html#types.coroutine) или [`asyncio.coroutine()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.coroutine), не будут перехвачены).667668Аргумент *wrapper* должен быть одним из следующих:669670- вызываемый объект, принимающий один аргумент (объект корутины);671- `None`, чтобы сбросить обёртку.672673При повторном вызове новая обёртка заменяет предыдущую. Эта функция привязана к потоку.674675Вызываемый объект *wrapper* не может определять новые корутины прямо или косвенно:676677```python678def wrapper(coro):679    async def wrap(coro):680        return await coro681    return wrap(coro)682sys.set_coroutine_wrapper(wrapper)683684async def foo():685    pass686687# Следующая строка вызовет ошибку RuntimeError, так как688# ``wrapper`` создаёт корутину ``wrap(coro)``:689foo()690```691692См. также [`get_coroutine_wrapper()`](https://python-all.ru/3.5/library/sys.html#sys.get_coroutine_wrapper).693694Новое в версии 3.5: См. [**PEP 492**](https://python-all.ru/3.5/library/sys.html) для получения дополнительной информации.695696> **Примечание**697>698> Эта функция была добавлена на временной основе (см. [**PEP 411**](https://python-all.ru/3.5/library/sys.html) для подробностей). Используйте её только для целей отладки.699700#### `sys.stdin`701702#### `sys.stdout`703704#### `sys.stderr`705706[Объекты файлов](https://python-all.ru/3.5/glossary.html#term-file-object), используемые интерпретатором для стандартного ввода, вывода и ошибок:707708- `stdin` используется для всего интерактивного ввода (включая вызовы [`input()`](https://python-all.ru/3.5/library/functions.html#input));709- `stdout` используется для вывода [`print()`](https://python-all.ru/3.5/library/functions.html#print) и [выражений](https://python-all.ru/3.5/glossary.html#term-expression), а также для приглашений [`input()`](https://python-all.ru/3.5/library/functions.html#input);710- Собственные приглашения интерпретатора и его сообщения об ошибках выводятся в `stderr`.711712Эти потоки являются обычными [текстовыми файлами](https://python-all.ru/3.5/glossary.html#term-text-file), подобными тем, что возвращает функция [`open()`](https://python-all.ru/3.5/library/functions.html#open). Их параметры выбираются следующим образом:713714- Кодировка символов зависит от платформы. В Windows, если поток интерактивный (то есть если его метод `isatty()` возвращает `True`), используется кодовая страница консоли, в противном случае – кодовая страница ANSI. На других платформах используется кодировка локали (см. [`locale.getpreferredencoding()`](https://python-all.ru/3.5/library/locale.html#locale.getpreferredencoding)).715716  Однако на всех платформах это значение можно переопределить, задав переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.5/using/cmdline.html#envvar-PYTHONIOENCODING) перед запуском Python.717- В интерактивном режиме стандартные потоки буферизируются построчно. В противном случае они буферизируются блоками, как обычные текстовые файлы. Это значение можно переопределить с помощью параметра командной строки [`-u`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-u).718719> **Примечание**720>721> Для записи или чтения двоичных данных в/из стандартных потоков используйте базовый двоичный объект [`buffer`](https://python-all.ru/3.5/library/io.html#io.TextIOBase.buffer). Например, для записи байтов в [`stdout`](https://python-all.ru/3.5/library/sys.html#sys.stdout) используйте `sys.stdout.buffer.write(b'abc')`.722>723> Однако если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться её код), имейте в виду, что стандартные потоки могут быть заменены объектами, подобными файлам, такими как [`io.StringIO`](https://python-all.ru/3.5/library/io.html#io.StringIO), которые не поддерживают атрибут `buffer`.724725#### `sys.__stdin__`726727#### `sys.__stdout__`728729#### `sys.__stderr__`730731Эти объекты содержат исходные значения `stdin`, `stderr` и `stdout` в начале программы. Они используются во время финализации и могут быть полезны для вывода в реальный стандартный поток, независимо от того, был ли перенаправлен объект `sys.std*`.732733Его также можно использовать для восстановления реальных файлов до известных работающих файловых объектов, если они были перезаписаны некорректным объектом. Однако предпочтительный способ – явно сохранить предыдущий поток перед его заменой и восстановить сохранённый объект.734735> **Примечание**736>737> При некоторых условиях `stdin`, `stdout` и `stderr`, а также исходные значения `__stdin__`, `__stdout__` и `__stderr__` могут быть `None`. Обычно это происходит в Windows GUI-приложениях, не подключённых к консоли, и в приложениях Python, запущенных с помощью **pythonw**.738739#### `sys.thread_info`740741[Структурный кортеж](https://python-all.ru/3.5/glossary.html#term-struct-sequence), содержащий информацию о реализации потоков.742743| Атрибут | Пояснение |744| --- | --- |745| `name` | Имя реализации потоков `'nt'`: потоки Windows `'pthread'`: потоки POSIX `'solaris'`: потоки Solaris |746| `lock` | Имя реализации блокировки: `'semaphore'`: блокировка использует семафор `'mutex+cond'`: блокировка использует мьютекс и условную переменную `None`, если эта информация неизвестна |747| [`version`](https://python-all.ru/3.5/library/sys.html#sys.version) | Имя и версия библиотеки потоков. Это строка, или `None`, если эта информация неизвестна. |748749Новое в версии 3.3.750751#### `sys.tracebacklimit`752753Когда этой переменной присвоено целое значение, она определяет максимальное количество уровней трассировки, выводимых при необработанном исключении. По умолчанию `1000`. Если установлено `0` или меньше, вся информация трассировки подавляется и выводятся только тип и значение исключения.754755#### `sys.version`756757Строка, содержащая номер версии интерпретатора Python, а также дополнительную информацию о номере сборки и используемом компиляторе. Эта строка отображается при запуске интерактивного интерпретатора. Не извлекайте из неё информацию о версии; вместо этого используйте [`version_info`](https://python-all.ru/3.5/library/sys.html#sys.version_info) и функции, предоставляемые модулем [`platform`](https://python-all.ru/3.5/library/platform.html#module-platform).758759#### `sys.api_version`760761Версия C API для данного интерпретатора. Программисты могут счесть это полезным при отладке конфликтов версий между Python и модулями расширения.762763#### `sys.version_info`764765Кортеж, содержащий пять компонентов номера версии: *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` и так далее.766767Изменено в версии 3.1: Добавлены именованные атрибуты компонентов.768769#### `sys.warnoptions`770771Это деталь реализации механизма предупреждений; не изменяйте это значение. Обратитесь к модулю [`warnings`](https://python-all.ru/3.5/library/warnings.html#module-warnings) за дополнительной информацией о механизме предупреждений.772773#### `sys.winver`774775Номер версии, используемый для формирования ключей реестра на платформах Windows. Он хранится как строковый ресурс 1000 в DLL Python. Обычно это первые три символа [`version`](https://python-all.ru/3.5/library/sys.html#sys.version). Приведён в модуле [`sys`](https://python-all.ru/3.5/library/sys.html#module-sys) в информационных целях; изменение этого значения не влияет на ключи реестра, используемые Python. Доступность: Windows.776777#### `sys._xoptions`778779Словарь различных флагов, специфичных для реализации, переданных через параметр командной строки [`-X`](https://python-all.ru/3.5/using/cmdline.html#id5). Имена параметров либо сопоставляются с их значениями, если они указаны явно, либо с [`True`](https://python-all.ru/3.5/library/constants.html#True). Пример:780781```console782$ ./python -Xa=b -Xc783Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)784[GCC 4.4.3] on linux2785Type "help", "copyright", "credits" or "license" for more information.786>>> import sys787>>> sys._xoptions788{'a': 'b', 'c': True}789```790791**Особенность реализации CPython:** Это специфичный для CPython способ доступа к параметрам, переданным через [`-X`](https://python-all.ru/3.5/using/cmdline.html#id5). Другие реализации могут экспортировать их другими средствами или не экспортировать вовсе.792793Новое в версии 3.2.794795Ссылки796797| [\[C99\]](https://python-all.ru/3.5/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.5/library/sys.html). |798| --- | --- |799