> **Источник:** https://python-all.ru/3.4/library/sys.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 29.1. [`sys`](https://python-all.ru/3.4/library/sys.html#module-sys) – Системно-зависимые параметры и функции

Этот модуль предоставляет доступ к некоторым переменным, используемым или поддерживаемым интерпретатором, и к функциям, которые активно взаимодействуют с интерпретатором. Он всегда доступен.

#### `sys.abiflags`

В системах POSIX, где Python собран с помощью стандартного скрипта `configure`, этот атрибут содержит флаги ABI, указанные в [**PEP 3149**](https://python-all.ru/3.4/library/sys.html).

Новое в версии 3.2.

#### `sys.argv`

Список аргументов командной строки, переданных скрипту Python. `argv[0]` – это имя скрипта (зависит от операционной системы, является ли это полным именем пути или нет). Если команда была выполнена с использованием опции командной строки [*-c*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-c) интерпретатора, `argv[0]` устанавливается в строку `'-c'`. Если имя скрипта не было передано интерпретатору Python, `argv[0]` является пустой строкой.

Для итерации по стандартному вводу или списку файлов, переданных в командной строке, обратитесь к модулю [`fileinput`](https://python-all.ru/3.4/library/fileinput.html#module-fileinput).

#### `sys.base_exec_prefix`

Устанавливается во время запуска Python, до запуска `site.py`, в то же значение, что и [`exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.exec_prefix). Если работа не ведётся в [*виртуальном окружении*](https://python-all.ru/3.4/library/venv.html#venv-def), значения останутся теми же; если `site.py` обнаруживает, что используется виртуальное окружение, значения [`prefix`](https://python-all.ru/3.4/library/sys.html#sys.prefix) и [`exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.exec_prefix) будут изменены, чтобы указывать на виртуальное окружение, тогда как [`base_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_exec_prefix) останутся указывающими на базовую установку Python (ту, из которой было создано виртуальное окружение).

Новое в версии 3.3.

#### `sys.base_prefix`

Устанавливается во время запуска Python, до запуска `site.py`, в то же значение, что и [`prefix`](https://python-all.ru/3.4/library/sys.html#sys.prefix). Если работа не ведётся в [*виртуальном окружении*](https://python-all.ru/3.4/library/venv.html#venv-def), значения останутся теми же; если `site.py` обнаруживает, что используется виртуальное окружение, значения [`prefix`](https://python-all.ru/3.4/library/sys.html#sys.prefix) и [`exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.exec_prefix) будут изменены, чтобы указывать на виртуальное окружение, тогда как [`base_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_prefix) и [`base_exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_exec_prefix) останутся указывающими на базовую установку Python (ту, из которой было создано виртуальное окружение).

Новое в версии 3.3.

#### `sys.byteorder`

Индикатор естественного порядка байтов. Значение равно `'big'` на платформах с обратным порядком (от старшего байта к младшему) и `'little'` на платформах с прямым порядком (от младшего байта к старшему).

#### `sys.builtin_module_names`

Кортеж строк с именами всех модулей, вкомпилированных в данный интерпретатор Python. (Эту информацию нельзя получить иным способом – `modules.keys()` перечисляет только импортированные модули.)

#### `sys.call_tracing(func, args)`

Вызывает `func(*args)`, пока включена трассировка. Состояние трассировки сохраняется, а затем восстанавливается. Предназначен для вызова из отладчика из контрольной точки для рекурсивной отладки другого кода.

#### `sys.copyright`

Строка, содержащая сведения об авторских правах на интерпретатор Python.

#### `sys._clear_type_cache()`

Очищает внутренний кеш типов. Кеш типов используется для ускорения поиска атрибутов и методов. Эту функцию следует использовать *только* для удаления лишних ссылок при отладке утечек ссылок.

Эту функцию следует использовать только для внутренних и специальных целей.

#### `sys._current_frames()`

Возвращает словарь, сопоставляющий идентификатор каждого потока самому верхнему фрейму стека, активному в этом потоке на момент вызова функции. Обратите внимание, что функции модуля [`traceback`](https://python-all.ru/3.4/library/traceback.html#module-traceback) могут построить стек вызовов, имея такой фрейм.

Это особенно полезно для отладки взаимоблокировок: эта функция не требует содействия заблокированных потоков, и стеки вызовов таких потоков заморожены, пока они остаются заблокированными. Кадр, возвращённый для незаблокированного потока, может не соответствовать текущей активности этого потока, когда вызывающий код изучает кадр.

Эту функцию следует использовать только для внутренних и специальных целей.

#### `sys._debugmallocstats()`

Выводит в stderr низкоуровневую информацию о состоянии распределителя памяти CPython.

Если Python настроен с ключом –with-pydebug, он также выполняет некоторые дорогостоящие проверки внутренней согласованности.

Новое в версии 3.3.

**Особенность реализации CPython:** Эта функция специфична для CPython. Точный формат вывода здесь не определён и может измениться.

#### `sys.dllhandle`

Целое число, определяющее дескриптор DLL Python. Доступность: Windows.

#### `sys.displayhook(value)`

Если *value* не равно `None`, эта функция выводит `repr(value)` в `sys.stdout` и сохраняет *value* в `builtins._`. Если `repr(value)` не кодируется в `sys.stdout.encoding` с обработчиком ошибок `sys.stdout.errors` (который, вероятно, `'strict'`), кодирует его в `sys.stdout.encoding` с обработчиком ошибок `'backslashreplace'`.

`sys.displayhook` вызывается для результата вычисления [*выражения*](https://python-all.ru/3.4/glossary.html#term-expression), введённого в интерактивном сеансе Python. Отображение этих значений можно настроить, назначив другую функцию с одним аргументом на `sys.displayhook`.

Псевдокод:

```python
def displayhook(value):
    if value is None:
        return
    # Установите '_' в None, чтобы избежать рекурсии
    builtins._ = None
    text = repr(value)
    try:
        sys.stdout.write(text)
    except UnicodeEncodeError:
        bytes = text.encode(sys.stdout.encoding, 'backslashreplace')
        if hasattr(sys.stdout, 'buffer'):
            sys.stdout.buffer.write(bytes)
        else:
            text = bytes.decode(sys.stdout.encoding, 'strict')
            sys.stdout.write(text)
    sys.stdout.write("\n")
    builtins._ = value
```

Изменено в версии 3.2: Используйте обработчик ошибок `'backslashreplace'` при [`UnicodeEncodeError`](https://python-all.ru/3.4/library/exceptions.html#UnicodeEncodeError).

#### `sys.dont_write_bytecode`

Если это true, Python не будет пытаться записывать файлы `.pyc` или `.pyo` при импорте исходных модулей. Изначально это значение устанавливается в `True` или `False` в зависимости от опции командной строки [*-B*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-B) и переменной окружения [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE), но вы можете установить его самостоятельно для управления генерацией файлов байт-кода.

#### `sys.excepthook(type, value, traceback)`

Эта функция выводит заданный traceback и исключение в `sys.stderr`.

Когда возникает неперехваченное исключение, интерпретатор вызывает `sys.excepthook` с тремя аргументами: классом исключения, экземпляром исключения и объектом traceback. В интерактивном сеансе это происходит непосредственно перед возвратом управления к приглашению; в программе Python это происходит непосредственно перед выходом программы. Обработку таких исключений верхнего уровня можно настроить, назначив другую функцию с тремя аргументами на `sys.excepthook`.

#### `sys.__displayhook__`

#### `sys.__excepthook__`

Эти объекты содержат исходные значения `displayhook` и `excepthook` в начале программы. Они сохраняются, чтобы `displayhook` и `excepthook` можно было восстановить, если они случайно будут заменены сломанными объектами.

#### `sys.exc_info()`

Эта функция возвращает кортеж из трёх значений, содержащих информацию об обрабатываемом в данный момент исключении. Возвращаемая информация относится как к текущему потоку, так и к текущему фрейму стека. Если текущий фрейм стека не обрабатывает исключение, информация берётся из вызывающего фрейма стека или его вызывающего, и так далее, пока не будет найден фрейм, обрабатывающий исключение. Здесь «обработка исключения» означает «выполнение блока except». Для любого фрейма стека доступна только информация об исключении, обрабатываемом в данный момент.

Если ни одно исключение не обрабатывается нигде в стеке, возвращается кортеж из трёх значений `None`. В противном случае возвращаемые значения: `(type, value, traceback)`. Их смысл: *type* – это тип обрабатываемого исключения (подкласс [`BaseException`](https://python-all.ru/3.4/library/exceptions.html#BaseException)); *value* – экземпляр исключения (экземпляр типа исключения); *traceback* – объект traceback (см. справочное руководство), который инкапсулирует стек вызовов в точке, где изначально возникло исключение.

#### `sys.exec_prefix`

Строка, задающая префикс сайт-специфичного каталога, в который устанавливаются платформозависимые файлы 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`.

> **Примечание**
>
> Если действует [*виртуальное окружение*](https://python-all.ru/3.4/library/venv.html#venv-def), это значение будет изменено в `site.py` так, чтобы указывать на виртуальное окружение. Значение для установки Python по-прежнему будет доступно через [`base_exec_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_exec_prefix).

#### `sys.executable`

Строка, содержащая абсолютный путь к исполняемому двоичному файлу интерпретатора Python на системах, где это имеет смысл. Если Python не может получить реальный путь к своему исполняемому файлу, [`sys.executable`](https://python-all.ru/3.4/library/sys.html#sys.executable) будет пустой строкой или `None`.

#### `sys.exit([arg])`

Выход из Python. Реализуется путём возбуждения исключения [`SystemExit`](https://python-all.ru/3.4/library/exceptions.html#SystemExit), поэтому действия по очистке, указанные в предложениях finally операторов [`try`](https://python-all.ru/3.4/reference/compound_stmts.html#try), выполняются, и есть возможность перехватить попытку выхода на внешнем уровне.

Необязательный аргумент *arg* может быть целым числом, задающим код возврата (по умолчанию ноль), или объектом другого типа. Если это целое число, ноль считается «успешным завершением», а любое ненулевое значение – «аварийным завершением» для оболочек и т.п. Большинство систем требуют, чтобы оно находилось в диапазоне 0–127, иначе результат не определён. В некоторых системах есть соглашения о назначении определённых значений определённым кодам возврата, но обычно они слабо проработаны; программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех остальных ошибок. Если передан объект другого типа, `None` эквивалентен нулю, а любой другой объект выводится в [`stderr`](https://python-all.ru/3.4/library/sys.html#sys.stderr) и приводит к коду возврата 1. В частности, `sys.exit("some error message")` – это быстрый способ завершить программу при возникновении ошибки.

Поскольку [`exit()`](https://python-all.ru/3.4/library/constants.html#exit) в конечном счёте «всего лишь» возбуждает исключение, она завершит процесс только при вызове из главного потока и если исключение не будет перехвачено.

#### `sys.flags`

[*struct sequence*](https://python-all.ru/3.4/glossary.html#term-struct-sequence) *flags* предоставляет состояние флагов командной строки. Атрибуты доступны только для чтения.

| атрибут | флаг |
| --- | --- |
| `debug` | [*-d*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-d) |
| [`inspect`](https://python-all.ru/3.4/library/inspect.html#module-inspect) | [*-i*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-i) |
| `интерактивный` | [*-i*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-i) |
| `optimize` | [*-O*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-O) или [*-OO*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-OO) |
| [`dont_write_bytecode`](https://python-all.ru/3.4/library/sys.html#sys.dont_write_bytecode) | [*-B*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-B) |
| `no_user_site` | [*-s*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-s) |
| `no_site` | [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-S) |
| `ignore_environment` | [*-E*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-E) |
| `verbose` | [*-v*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-v) |
| `bytes_warning` | [*-b*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-b) |
| `quiet` | [*-q*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-q) |
| `hash_randomization` | [*-R*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-R) |

Изменено в версии 3.2: добавлен атрибут `quiet` для нового флага [*-q*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-q).

Новое в версии 3.2.3: атрибут `hash_randomization`.

Изменено в версии 3.3: удалён устаревший атрибут `division_warning`.

#### `sys.float_info`

[*Структурная последовательность*](https://python-all.ru/3.4/glossary.html#term-struct-sequence), содержащая информацию о типе float. Она содержит низкоуровневую информацию о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей запятой определённым в стандартном заголовочном файле `float.h` для языка ‘C’ программирования; см. раздел 5.2.4.2.2 стандарта ISO/IEC C 1999 года [\[C99\]](https://python-all.ru/3.4/library/sys.html#c99), «Характеристики типов с плавающей запятой».

| атрибут | float.h макрос | объяснение |
| --- | --- | --- |
| `epsilon` | DBL\_EPSILON | разница между 1 и наименьшим значением, большим 1, которое может быть представлено как float |
| `dig` | DBL\_DIG | maximum number of decimal digits that can be faithfully represented in a float; see below |
| `mant_dig` | DBL\_MANT\_DIG | Точность float: количество цифр по основанию `radix` в мантиссе числа с плавающей запятой. |
| [`max`](https://python-all.ru/3.4/library/functions.html#max) | DBL\_MAX | максимальное представимое конечное число типа float |
| `max_exp` | DBL\_MAX\_EXP | максимальное целое e, для которого `radix**(e-1)` является представимым конечным числом с плавающей запятой. |
| `max_10_exp` | DBL\_MAX\_10\_EXP | максимальное целое e, для которого `10**e` находится в диапазоне представимых конечных чисел с плавающей запятой. |
| [`min`](https://python-all.ru/3.4/library/functions.html#min) | DBL\_MIN | минимальное положительное нормализованное число типа float |
| `min_exp` | DBL\_MIN\_EXP | минимальное целое e, для которого `radix**(e-1)` является нормализованным числом с плавающей запятой. |
| `min_10_exp` | DBL\_MIN\_10\_EXP | наименьшее целое e, такое что `10**e` является нормализованным числом с плавающей запятой |
| `основание системы счисления` | FLT\_RADIX | radix of exponent representation |
| `режим округления` | FLT\_ROUNDS | Целочисленная константа, представляющая режим округления, используемый для арифметических операций. Она отражает значение макроса системы FLT\_ROUNDS на момент запуска интерпретатора. См. раздел 5.2.4.2.2 стандарта C99 для объяснения возможных значений и их смысла. |

Атрибут `sys.float_info.dig` требует дополнительного пояснения. Если `s` – это строка, представляющая десятичное число с не более чем `sys.float_info.dig` значащими цифрами, то преобразование `s` в float и обратно восстановит строку, представляющую то же десятичное значение:

```python
>>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979'    # десятичная строка с 15 значащими цифрами
>>> format(float(s), '.15g')  # Преобразование во float и обратно -> то же значение
'3.14159265358979'
```

Но для строк с более чем `sys.float_info.dig` значащими цифрами это не всегда верно:

```python
>>> s = '9876543211234567'    # 16 значащих цифр – слишком много!
>>> format(float(s), '.16g')  # преобразование изменяет значение
'9876543211234568'
```

#### `sys.float_repr_style`

Строка, указывающая, как функция [`repr()`](https://python-all.ru/3.4/library/functions.html#repr) ведет себя для чисел с плавающей запятой. Если строка имеет значение `'short'`, то для конечного числа с плавающей запятой `x` вызов `repr(x)` стремится выдать короткую строку со свойством, что `float(repr(x)) == x`. Это обычное поведение в Python 3.1 и новее. В противном случае `float_repr_style` имеет значение `'legacy'`, и `repr(x)` ведет себя так же, как в версиях Python до 3.1.

Новое в версии 3.1.

#### `sys.getallocatedblocks()`

Возвращает количество блоков памяти, выделенных в данный момент интерпретатором, независимо от их размера. Эта функция в основном полезна для отслеживания и отладки утечек памяти. Из-за внутренних кешей интерпретатора результат может меняться от вызова к вызову; возможно, потребуется вызвать [`_clear_type_cache()`](https://python-all.ru/3.4/library/sys.html#sys._clear_type_cache) и [`gc.collect()`](https://python-all.ru/3.4/library/gc.html#gc.collect), чтобы получить более предсказуемые результаты.

Если сборка или реализация Python не может разумно вычислить эту информацию, [`getallocatedblocks()`](https://python-all.ru/3.4/library/sys.html#sys.getallocatedblocks) может возвращать 0.

Новое в версии 3.4.

#### `sys.getcheckinterval()`

Возвращает «интервал проверки» интерпретатора; см. [`setcheckinterval()`](https://python-all.ru/3.4/library/sys.html#sys.setcheckinterval).

Устарело с версии 3.2: Используйте [`getswitchinterval()`](https://python-all.ru/3.4/library/sys.html#sys.getswitchinterval) вместо этого.

#### `sys.getdefaultencoding()`

Возвращает имя текущей кодировки строк по умолчанию, используемой реализацией Unicode.

#### `sys.getdlopenflags()`

Возвращает текущее значение флагов, используемых для вызовов `dlopen()`. Символические имена значений флагов можно найти в модуле [`os`](https://python-all.ru/3.4/library/os.html#module-os) (константы `RTLD_xxx`, например [`os.RTLD_LAZY`](https://python-all.ru/3.4/library/os.html#os.RTLD_LAZY)). Доступность: Unix.

#### `sys.getfilesystemencoding()`

Возвращает название кодировки, используемой для преобразования имён файлов в кодировке Unicode в системные имена файлов. Результат зависит от операционной системы:

- В Mac OS X кодировка – `'utf-8'`.
- В Unix кодировка определяется предпочтениями пользователя в соответствии с результатом nl\_langinfo(CODESET).
- В Windows NT+ имена файлов изначально в Unicode, поэтому преобразование не выполняется. [`getfilesystemencoding()`](https://python-all.ru/3.4/library/sys.html#sys.getfilesystemencoding) по-прежнему возвращает `'mbcs'`, поскольку это кодировка, которую приложения должны использовать, когда они явно хотят преобразовать строки Unicode в байтовые строки, эквивалентные при использовании в качестве имен файлов.
- В Windows 9x кодировка – `'mbcs'`.

Изменено в версии 3.2: Результат [`getfilesystemencoding()`](https://python-all.ru/3.4/library/sys.html#sys.getfilesystemencoding) больше не может быть `None`.

#### `sys.getrefcount(object)`

Возвращает счетчик ссылок объекта *object*. Возвращаемое значение обычно на единицу больше ожидаемого, поскольку включает (временную) ссылку на объект в качестве аргумента [`getrefcount()`](https://python-all.ru/3.4/library/sys.html#sys.getrefcount).

#### `sys.getrecursionlimit()`

Возвращает текущее значение предела рекурсии – максимальной глубины стека интерпретатора Python. Этот предел предотвращает переполнение C-стека и аварийное завершение Python из-за бесконечной рекурсии. Его можно задать с помощью [`setrecursionlimit()`](https://python-all.ru/3.4/library/sys.html#sys.setrecursionlimit).

#### `sys.getsizeof(object[, default])`

Возвращает размер объекта в байтах. Объект может быть любого типа. Все встроенные объекты возвращают корректные результаты, но для сторонних расширений это не обязательно – результат зависит от реализации.

Учитывается только память, непосредственно занимаемая объектом, а не память объектов, на которые он ссылается.

Если указан, *default* будет возвращен, если объект не предоставляет способа получения размера. В противном случае будет возбуждено [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError).

[`getsizeof()`](https://python-all.ru/3.4/library/sys.html#sys.getsizeof) вызывает метод объекта `__sizeof__` и добавляет дополнительные накладные расходы сборщика мусора, если объект управляется сборщиком мусора.

См. [рецепт рекурсивного получения размера (recursive sizeof)](https://python-all.ru/3.4/library/sys.html) для примера рекурсивного использования [`getsizeof()`](https://python-all.ru/3.4/library/sys.html#sys.getsizeof) для определения размера контейнеров и всего их содержимого.

#### `sys.getswitchinterval()`

Возвращает «интервал переключения потоков» интерпретатора; см. [`setswitchinterval()`](https://python-all.ru/3.4/library/sys.html#sys.setswitchinterval).

Новое в версии 3.2.

#### `sys._getframe([depth])`

Возвращает объект фрейма из стека вызовов. Если указан необязательный целочисленный параметр *depth*, возвращается объект фрейма, находящийся на указанное количество вызовов ниже вершины стека. Если это глубже, чем стек вызовов, возбуждается [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError). Значение по умолчанию для *depth* равно нулю, при этом возвращается фрейм на вершине стека вызовов.

**Особенности реализации CPython:** Эта функция предназначена только для внутренних и специализированных целей. Она не гарантированно существует во всех реализациях Python.

#### `sys.getprofile()`

Возвращает функцию профилировщика, установленную с помощью [`setprofile()`](https://python-all.ru/3.4/library/sys.html#sys.setprofile).

#### `sys.gettrace()`

Возвращает функцию трассировки, установленную с помощью [`settrace()`](https://python-all.ru/3.4/library/sys.html#sys.settrace).

**Особая деталь реализации CPython:** Функция [`gettrace()`](https://python-all.ru/3.4/library/sys.html#sys.gettrace) предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия кода и тому подобного. Её поведение является частью платформы реализации, а не частью определения языка, и поэтому может быть недоступно во всех реализациях Python.

#### `sys.getwindowsversion()`

Возвращает именованный кортеж, описывающий текущую версию 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 элементов.

*platform* может принимать одно из следующих значений:

| Константа | Платформа |
| --- | --- |
| `0 (VER_PLATFORM_WIN32s)` | Win32s на Windows 3.1 |
| `1 (VER_PLATFORM_WIN32_WINDOWS)` | Windows 95/98/ME |
| `2 (VER_PLATFORM_WIN32_NT)` | Windows NT/2000/XP/x64 |
| `3 (VER_PLATFORM_WIN32_CE)` | Windows CE |

*product\_type* может быть одним из следующих значений:

| Константа | Значение |
| --- | --- |
| `1 (VER_NT_WORKSTATION)` | Система является рабочей станцией. |
| `2 (VER_NT_DOMAIN_CONTROLLER)` | Система является контроллером домена. |
| `3 (VER_NT_SERVER)` | Система является сервером, но не контроллером домена. |

Эта функция является обёрткой над Win32-функцией `GetVersionEx()`; обратитесь к документации Microsoft по `OSVERSIONINFOEX()` для получения дополнительной информации об этих полях.

Доступность: Windows.

Изменено в версии 3.2: Изменён на именованный кортеж и добавлены *service\_pack\_minor*, *service\_pack\_major*, *suite\_mask* и *product\_type*.

#### `sys.hash_info`

[*struct sequence*](https://python-all.ru/3.4/glossary.html#term-struct-sequence), предоставляющий параметры реализации числового хеша. Для более подробной информации о хешировании числовых типов см. [*Хеширование числовых типов*](https://python-all.ru/3.4/library/stdtypes.html#numeric-hash).

| атрибут | объяснение |
| --- | --- |
| `width` | разрядность в битах, используемая для хеш-значений |
| `modulus` | простой модуль P, используемый для числовой схемы хеширования |
| `inf` | хэш-значение, возвращаемое для положительной бесконечности |
| `nan` | значение хэша, возвращаемое для nan |
| `imag` | множитель для мнимой части комплексного числа |
| `algorithm` | имя алгоритма хэширования для str, bytes и memoryview |
| `hash_bits` | внутренний размер вывода алгоритма хэширования |
| `seed_bits` | размер ключа начальной инициализации (seed) алгоритма хэширования |

Новое в версии 3.2.

Изменено в версии 3.4: добавлены *algorithm*, *hash\_bits* и *seed\_bits*

#### `sys.hexversion`

Номер версии, закодированный в виде одного целого числа. Гарантируется, что он увеличивается с каждой версией, включая надлежащую поддержку непроизводственных выпусков. Например, чтобы проверить, что интерпретатор Python имеет версию не ниже 1.5.2, используйте:

```python
if sys.hexversion >= 0x010502F0:
    # используйте некоторую продвинутую функцию
    ...
else:
    # используйте альтернативную реализацию или предупредите пользователя
    ...
```

Это называется `hexversion`, поскольку действительно выглядит осмысленно только при передаче во встроенную функцию [`hex()`](https://python-all.ru/3.4/library/functions.html#hex). Для более понятного представления той же информации можно использовать [*структуру*](https://python-all.ru/3.4/glossary.html#term-struct-sequence) [`sys.version_info`](https://python-all.ru/3.4/library/sys.html#sys.version_info).

Подробнее о `hexversion` можно узнать в разделе [*Версионирование API и ABI*](https://python-all.ru/3.4/c-api/apiabiversion.html#apiabiversion).

#### `sys.implementation`

Объект, содержащий информацию о реализации текущего интерпретатора Python. Следующие атрибуты должны существовать во всех реализациях Python.

*name* – это идентификатор реализации, например `'cpython'`. Фактическая строка определяется конкретной реализацией Python, но гарантированно используется нижний регистр.

*version* – это именованный кортеж в том же формате, что и [`sys.version_info`](https://python-all.ru/3.4/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 эти значения совпадают, так как CPython – эталонная реализация.

*hexversion* – это версия реализации в шестнадцатеричном формате, например [`sys.hexversion`](https://python-all.ru/3.4/library/sys.html#sys.hexversion).

*cache\_tag* – это тег, используемый механизмом импорта в именах файлов кэшированных модулей. По соглашению это комбинация имени и версии реализации, например `'cpython-33'`. Однако реализация Python может использовать другое значение, если это уместно. Если `cache_tag` установлен в `None`, это означает, что кэширование модулей следует отключить.

[`sys.implementation`](https://python-all.ru/3.4/library/sys.html#sys.implementation) может содержать дополнительные атрибуты, специфичные для данной реализации Python. Эти нестандартные атрибуты должны начинаться с символа подчёркивания и не описываются здесь. Независимо от содержимого, [`sys.implementation`](https://python-all.ru/3.4/library/sys.html#sys.implementation) не изменяется во время работы интерпретатора и не меняется между версиями реализации. (Однако может меняться между версиями языка Python.) Дополнительную информацию см. в [**PEP 421**](https://python-all.ru/3.4/library/sys.html).

Новое в версии 3.3.

#### `sys.int_info`

[*struct sequence*](https://python-all.ru/3.4/glossary.html#term-struct-sequence), содержащий информацию о внутреннем представлении целых чисел в Python. Атрибуты доступны только для чтения.

| Атрибут | Пояснение |
| --- | --- |
| `bits_per_digit` | количество битов в каждом разряде. Целые числа Python хранятся внутри в системе с основанием `2**int_info.bits_per_digit` |
| `sizeof_digit` | размер в байтах типа C, используемого для представления разряда |

Новое в версии 3.1.

#### `sys.__interactivehook__`

When this attribute exists, its value is automatically called (with no arguments) when the interpreter is launched in [*interactive mode*](https://python-all.ru/3.4/tutorial/interpreter.html#tut-interactive). This is done after the [`PYTHONSTARTUP`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONSTARTUP) file is read, so that you can set this hook there. The [`site`](https://python-all.ru/3.4/library/site.html#module-site) module [*sets this*](https://python-all.ru/3.4/library/site.html#rlcompleter-config).

Новое в версии 3.4.

#### `sys.intern(string)`

Помещает *строку* в таблицу «интернированных» строк и возвращает интернированную строку – *строку* (ту же самую или копию). Интернирование строк полезно для небольшого повышения производительности поиска в словаре: если ключи в словаре интернированы и искомый ключ интернирован, сравнение ключей (после хеширования) может выполняться сравнением указателей, а не строк. Обычно имена, используемые в программах Python, автоматически интернируются, и словари, используемые для хранения атрибутов модулей, классов или экземпляров, имеют интернированные ключи.

Интернированные строки не бессмертны; необходимо сохранять ссылку на возвращаемое значение [`intern()`](https://python-all.ru/3.4/library/sys.html#sys.intern), чтобы пользоваться преимуществами интернирования.

#### `sys.last_type`

#### `sys.last_value`

#### `sys.last_traceback`

Эти три переменные определены не всегда; они устанавливаются, когда исключение не обработано и интерпретатор выводит сообщение об ошибке и трассировку стека. Предполагается, что они позволяют пользователю в интерактивном режиме импортировать модуль отладчика и заняться посмертной отладкой, не перезапуская команду, вызвавшую ошибку. (Типичное использование – `import pdb; pdb.pm()` для входа в посмертный отладчик; подробнее см. модуль [`pdb`](https://python-all.ru/3.4/library/pdb.html#module-pdb).)

Смысл этих переменных такой же, как у возвращаемых значений [`exc_info()`](https://python-all.ru/3.4/library/sys.html#sys.exc_info), описанной выше.

#### `sys.maxsize`

Целое число, показывающее максимальное значение, которое может принимать переменная типа `Py_ssize_t`. Обычно это `2**31 - 1` на 32-битной платформе и `2**63 - 1` на 64-битной.

#### `sys.maxunicode`

Целое число, содержащее значение наибольшей кодовой точки Unicode, т.е. `1114111` (`0x10FFFF` в шестнадцатеричном представлении).

Изменено в версии 3.3: До [**PEP 393**](https://python-all.ru/3.4/library/sys.html) `sys.maxunicode` был равен либо `0xFFFF`, либо `0x10FFFF` в зависимости от параметра конфигурации, определяющего, хранятся ли символы Unicode в формате UCS-2 или UCS-4.

#### `sys.meta_path`

Список объектов [*поисковиков (finder)*](https://python-all.ru/3.4/glossary.html#term-finder), у которых вызывается метод `find_module()`, чтобы выяснить, может ли один из объектов найти импортируемый модуль. Метод `find_module()` вызывается по крайней мере с абсолютным именем импортируемого модуля. Если импортируемый модуль содержится в пакете, то вторым аргументом передаётся атрибут [`__path__`](https://python-all.ru/3.4/reference/import.html#__path__) родительского пакета. Метод возвращает `None`, если модуль не найден, иначе возвращает [*загрузчик (loader)*](https://python-all.ru/3.4/glossary.html#term-loader).

[`sys.meta_path`](https://python-all.ru/3.4/library/sys.html#sys.meta_path) просматривается до любых неявных поисковиков по умолчанию и до [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path).

See [**PEP 302**](https://python-all.ru/3.4/library/sys.html) for the original specification.

#### `sys.modules`

Это словарь, сопоставляющий имена модулей с уже загруженными модулями. С его помощью можно принудительно перезагружать модули и выполнять другие трюки. Однако замена словаря не обязательно сработает как ожидается, а удаление важных элементов из словаря может привести к сбою Python.

#### `sys.path`

Список строк, задающий путь поиска модулей. Инициализируется из переменной окружения [`PYTHONPATH`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONPATH), а также значения по умолчанию, зависящего от установки.

При инициализации при запуске программы первый элемент этого списка, `path[0]`, содержит каталог со скриптом, который был использован для вызова интерпретатора Python. Если этот каталог недоступен (например, если интерпретатор запущен в интерактивном режиме или скрипт читается из стандартного ввода), `path[0]` является пустой строкой, что заставляет Python сначала искать модули в текущем каталоге. Обратите внимание, что каталог скрипта вставляется *перед* записями, добавленными в результате [`PYTHONPATH`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONPATH).

Программа может свободно изменять этот список для своих целей. К [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path) следует добавлять только строки и байты; все остальные типы данных игнорируются при импорте.

> **См. также**
>
> Модуль [`site`](https://python-all.ru/3.4/library/site.html#module-site) описывает, как использовать .pth-файлы для расширения [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path).

#### `sys.path_hooks`

Список вызываемых объектов, которые принимают путь в качестве аргумента и пытаются создать для него [*искатель*](https://python-all.ru/3.4/glossary.html#term-finder). Если искатель может быть создан, вызываемый объект должен вернуть его; в противном случае возбуждается [`ImportError`](https://python-all.ru/3.4/library/exceptions.html#ImportError).

Впервые описано в [**PEP 302**](https://python-all.ru/3.4/library/sys.html).

#### `sys.path_importer_cache`

Словарь, используемый как кеш для объектов [*искателя*](https://python-all.ru/3.4/glossary.html#term-finder). Ключами являются пути, которые были переданы в [`sys.path_hooks`](https://python-all.ru/3.4/library/sys.html#sys.path_hooks), а значениями – найденные искатели. Если путь является допустимым файловым путем в файловой системе, но ни один искатель не найден в [`sys.path_hooks`](https://python-all.ru/3.4/library/sys.html#sys.path_hooks), то сохраняется `None`.

Впервые описано в [**PEP 302**](https://python-all.ru/3.4/library/sys.html).

Изменено в версии 3.3: Вместо [`imp.NullImporter`](https://python-all.ru/3.4/library/imp.html#imp.NullImporter) теперь сохраняется `None`, если искатель не найден.

#### `sys.platform`

Эта строка содержит идентификатор платформы, который можно использовать, например, для добавления платформозависимых компонентов в [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path).

Для Unix-систем, за исключением Linux, это имя ОС в нижнем регистре, возвращаемое командой `uname -s`, с добавлением первой части версии, возвращаемой `uname -r`, например `'sunos5'` или `'freebsd8'`, *на момент сборки Python*. Если не требуется проверять конкретную версию системы, рекомендуется использовать следующую идиому:

```python
if sys.platform.startswith('freebsd'):
    # Код, специфичный для FreeBSD, здесь...
elif sys.platform.startswith('linux'):
    # Код, специфичный для Linux...
```

Для остальных систем значения следующие:

| Система | Значение `platform` |
| --- | --- |
| Linux | `'linux'` |
| Windows | `'win32'` |
| Windows/Cygwin | `'cygwin'` |
| Mac OS X | `'darwin'` |

Изменено в версии 3.3: На Linux [`sys.platform`](https://python-all.ru/3.4/library/sys.html#sys.platform) больше не содержит номер старшей версии. Теперь это всегда `'linux'` вместо `'linux2'` или `'linux3'`. Поскольку старые версии Python включали номер версии, рекомендуется всегда использовать идиому с `startswith`, приведённую выше.

> **См. также**
>
> [`os.name`](https://python-all.ru/3.4/library/os.html#os.name) имеет более грубую детализацию. [`os.uname()`](https://python-all.ru/3.4/library/os.html#os.uname) даёт зависимую от системы информацию о версии.
>
> Модуль [`platform`](https://python-all.ru/3.4/library/platform.html#module-platform) предоставляет подробные проверки идентификационных данных системы.

#### `sys.prefix`

Строка, задающая зависимый от сайта префикс каталога, в который устанавливаются платформонезависимые файлы Python; по умолчанию это строка `'/usr/local'`. Этот префикс можно задать во время сборки с помощью аргумента `--prefix` скрипта **configure**. Основной набор библиотечных модулей Python устанавливается в каталог `prefix/lib/pythonX.Y`, а платформонезависимые заголовочные файлы (все, кроме `pyconfig.h`) хранятся в `prefix/include/pythonX.Y`, где *X.Y* – номер версии Python, например `3.2`.

> **Примечание**
>
> Если действует [*виртуальное окружение*](https://python-all.ru/3.4/library/venv.html#venv-def), то это значение будет изменено в `site.py`, чтобы указывать на виртуальное окружение. Значение для установки Python по-прежнему будет доступно через [`base_prefix`](https://python-all.ru/3.4/library/sys.html#sys.base_prefix).

#### `sys.ps1`

#### `sys.ps2`

Строки, задающие основное и дополнительное приглашения интерпретатора. Они определены только в том случае, если интерпретатор работает в интерактивном режиме. Их начальные значения в этом случае – `'>>> '` и `'... '`. Если какой-либо из этих переменных присвоить нестроковый объект, его [`str()`](https://python-all.ru/3.4/library/stdtypes.html#str) будет вычисляться заново каждый раз, когда интерпретатор готовится прочитать новую интерактивную команду; это можно использовать для реализации динамического приглашения.

#### `sys.setcheckinterval(interval)`

Устанавливает «интервал проверки» интерпретатора. Это целочисленное значение определяет, как часто интерпретатор проверяет периодические события, такие как переключения потоков и обработчики сигналов. Значение по умолчанию – `100`, то есть проверка выполняется каждые 100 виртуальных инструкций Python. Установка большего значения может повысить производительность для программ, использующих потоки. Установка значения `<=` 0 приводит к проверке каждой виртуальной инструкции, максимально повышая отзывчивость, но также и накладные расходы.

Устарело с версии 3.2: Эта функция больше не действует, так как внутренняя логика переключения потоков и асинхронных задач была переписана. Вместо неё используйте [`setswitchinterval()`](https://python-all.ru/3.4/library/sys.html#sys.setswitchinterval).

#### `sys.setdlopenflags(n)`

Устанавливает флаги, используемые интерпретатором для вызовов `dlopen()`, например, когда интерпретатор загружает модули расширения. В частности, при вызове в виде `sys.setdlopenflags(0)` это включит ленивое разрешение символов при импорте модуля. Для совместного использования символов между модулями расширения вызывайте `sys.setdlopenflags(os.RTLD_GLOBAL)`. Символические имена значений флагов можно найти в модуле [`os`](https://python-all.ru/3.4/library/os.html#module-os) (константы `RTLD_xxx`, например, [`os.RTLD_LAZY`](https://python-all.ru/3.4/library/os.html#os.RTLD_LAZY)).

Доступность: Unix.

#### `sys.setprofile(profilefunc)`

Устанавливает профилирующую функцию системы, что позволяет реализовать профилировщик исходного кода Python на самом Python. См. главу [*The Python Profilers*](https://python-all.ru/3.4/library/profile.html#profile) для получения дополнительной информации о профилировщике Python. Профилирующая функция системы вызывается аналогично системной трассирующей функции (см. [`settrace()`](https://python-all.ru/3.4/library/sys.html#sys.settrace)), но не вызывается для каждой выполняемой строки кода (только при вызове и возврате, при этом событие возврата сообщается даже в случае возникновения исключения). Функция привязана к потоку, но у профилировщика нет способа узнать о переключении контекста между потоками, поэтому использование этой функции в присутствии нескольких потоков не имеет смысла. Кроме того, её возвращаемое значение не используется, поэтому она может просто возвращать `None`.

#### `sys.setrecursionlimit(limit)`

Устанавливает максимальную глубину стека интерпретатора Python в *limit*. Этот предел предотвращает переполнение C-стека из-за бесконечной рекурсии и аварийное завершение Python.

Максимально возможный предел зависит от платформы. Пользователь может увеличить предел, если программа требует глубокой рекурсии, а платформа поддерживает более высокий предел. Это следует делать с осторожностью, так как слишком высокий предел может привести к аварийному завершению.

#### `sys.setswitchinterval(interval)`

Устанавливает интервал переключения потоков интерпретатора (в секундах). Это значение с плавающей точкой определяет идеальную длительность «квантов времени», выделяемых одновременно работающим потокам Python. Обратите внимание, что фактическое значение может быть больше, особенно при использовании долго выполняющихся внутренних функций или методов. Кроме того, какой поток будет запланирован по окончании интервала, решает операционная система – у интерпретатора нет собственного планировщика.

Новое в версии 3.2.

#### `sys.settrace(tracefunc)`

Устанавливает трассирующую функцию системы, что позволяет реализовать отладчик исходного кода Python на самом Python. Функция привязана к потоку; чтобы отладчик поддерживал несколько потоков, её необходимо зарегистрировать с помощью [`settrace()`](https://python-all.ru/3.4/library/sys.html#sys.settrace) для каждого отлаживаемого потока.

Трассирующие функции должны принимать три аргумента: *frame*, *event* и *arg*. *frame* – это текущий стековый фрейм. *event* – строка: `'call'`, `'line'`, `'return'`, `'исключение'`, `'c_call'`, `'c_return'` или `'c_exception'`. Значение *arg* зависит от типа события.

Трассирующая функция вызывается (с *event*, установленным в `'call'`) всякий раз, когда входит в новую локальную область видимости; она должна возвращать ссылку на локальную трассирующую функцию для этой области или `None`, если область не нужно трассировать.

Локальная трассирующая функция должна возвращать ссылку на саму себя (или на другую функцию для продолжения трассировки в этой области) или `None`, чтобы отключить трассировку в этой области.

События имеют следующее значение:

**`'call'`**

Вызывается функция (или вход в другой блок кода). Вызывается глобальная трассирующая функция;

*arg*

равен

`None`

; возвращаемое значение указывает локальную трассирующую функцию.

**`'line'`**

Интерпретатор собирается выполнить новую строку кода или повторно выполнить условие цикла. Вызывается локальная трассирующая функция;

*arg*

равен

`None`

; возвращаемое значение указывает новую локальную трассирующую функцию. См.

`Objects/lnotab_notes.txt`

для подробного объяснения того, как это работает.

**`'return'`**

Функция (или другой блок кода) собирается вернуть управление. Вызывается локальная трассирующая функция;

*arg*

– это значение, которое будет возвращено, или

`None`

, если событие вызвано возбуждённым исключением. Возвращаемое значение трассирующей функции игнорируется.

**`'исключение'`**

Произошло исключение. Вызывается локальная трассирующая функция;

*arg*

– это кортеж

`(исключение, value, traceback)`

; возвращаемое значение указывает новую локальную трассирующую функцию.

**`'c_call'`**

Готовится вызов C-функции. Это может быть функция расширения или встроенная функция.

*arg*

– это объект C-функции.

**`'c_return'`**

C-функция вернула результат.

*arg*

– это объект C-функции.

**`'c_exception'`**

C-функция возбудила исключение.

*arg*

– это объект C-функции.

Обратите внимание, что при распространении исключения вниз по цепочке вызывающих объектов событие `'исключение'` генерируется на каждом уровне.

Дополнительную информацию об объектах кода и фреймах см. в [*Стандартной иерархии типов*](https://python-all.ru/3.4/reference/datamodel.html#types).

**Особенность реализации CPython:** Функция [`settrace()`](https://python-all.ru/3.4/library/sys.html#sys.settrace) предназначена только для реализации отладчиков, профилировщиков, инструментов измерения покрытия кода и тому подобного. Её поведение является частью конкретной реализации платформы, а не частью определения языка, и поэтому может быть недоступна во всех реализациях Python.

#### `sys.settscdump(on_flag)`

Включает дамп измерений виртуальной машины с использованием счётчика временных меток Pentium, если *on\_flag* истинно. Отключает эти дампы, если *on\_flag* ложно. Функция доступна только если Python был скомпилирован с `--with-tsc`. Чтобы понять вывод этого дампа, прочитайте `Python/ceval.c` в исходных кодах Python.

**Особенность реализации CPython:** Эта функция тесно привязана к внутренним деталям CPython и вряд ли будет реализована в других интерпретаторах.

#### `sys.stdin`

#### `sys.stdout`

#### `sys.stderr`

[*Объекты файлов*](https://python-all.ru/3.4/glossary.html#term-file-object), используемые интерпретатором для стандартного ввода, вывода и ошибок:

- `stdin` используется для всего интерактивного ввода (включая вызовы [`input()`](https://python-all.ru/3.4/library/functions.html#input));
- `stdout` используется для вывода операторов [`print()`](https://python-all.ru/3.4/library/functions.html#print) и [*expression*](https://python-all.ru/3.4/glossary.html#term-expression), а также для приглашений [`input()`](https://python-all.ru/3.4/library/functions.html#input);
- Собственные приглашения интерпретатора и его сообщения об ошибках направляются в `stderr`.

Эти потоки – обычные [*текстовые файлы*](https://python-all.ru/3.4/glossary.html#term-text-file), такие же, как те, что возвращаются функцией [`open()`](https://python-all.ru/3.4/library/functions.html#open). Их параметры выбираются следующим образом:

- Кодировка символов зависит от платформы. В Windows, если поток интерактивный (то есть его метод `isatty()` возвращает `True`), используется кодовая страница консоли, в противном случае – кодовая страница ANSI. На других платформах используется локальная кодировка (см. [`locale.getpreferredencoding()`](https://python-all.ru/3.4/library/locale.html#locale.getpreferredencoding)).

  Однако на всех платформах это значение можно переопределить, задав переменную окружения [`PYTHONIOENCODING`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONIOENCODING) перед запуском Python.
- В интерактивном режиме стандартные потоки буферизируются построчно. В противном случае они буферизируются блоками, как обычные текстовые файлы. Это значение можно переопределить с помощью параметра командной строки [*-u*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-u).

> **Примечание**
>
> Для записи или чтения двоичных данных из/в стандартные потоки используйте базовый двоичный объект [`buffer`](https://python-all.ru/3.4/library/io.html#io.TextIOBase.buffer). Например, чтобы записать байты в [`stdout`](https://python-all.ru/3.4/library/sys.html#sys.stdout), используйте `sys.stdout.buffer.write(b'abc')`.
>
> Однако если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться её код), учтите, что стандартные потоки могут быть заменены на файлоподобные объекты, например [`io.StringIO`](https://python-all.ru/3.4/library/io.html#io.StringIO), которые не поддерживают атрибут `buffer`.

#### `sys.__stdin__`

#### `sys.__stdout__`

#### `sys.__stderr__`

Эти объекты содержат исходные значения `stdin`, `stderr` и `stdout` на момент запуска программы. Они используются при финализации и могут быть полезны для вывода в реальный стандартный поток независимо от того, был ли перенаправлен объект `sys.std*`.

Его также можно использовать для восстановления реальных файлов до известных работающих файловых объектов, если они были перезаписаны некорректным объектом. Однако предпочтительный способ – явно сохранить предыдущий поток перед его заменой и восстановить сохранённый объект.

> **Примечание**
>
> При некоторых условиях `stdin`, `stdout` и `stderr`, а также исходные значения `__stdin__`, `__stdout__` и `__stderr__` могут быть равны None. Обычно это характерно для Windows GUI-приложений, которые не подключены к консоли, и Python-приложений, запущенных с помощью **pythonw**.

#### `sys.thread_info`

[*Структурный кортеж*](https://python-all.ru/3.4/glossary.html#term-struct-sequence), содержащий информацию о реализации потоков.

| Атрибут | Пояснение |
| --- | --- |
| `name` | Имя реализации потоков `'nt'`: Потоки Windows `'pthread'`: Потоки POSIX `'solaris'`: Потоки Solaris |
| `блокировка` | Имя реализации блокировки: `'semaphore'`: блокировка использует семафор `'mutex+cond'`: блокировка использует мьютекс и условную переменную `None`, если эта информация неизвестна |
| [`version`](https://python-all.ru/3.4/library/sys.html#sys.version) | Имя и версия библиотеки потоков. Это строка или `None`, если эта информация неизвестна. |

Новое в версии 3.3.

#### `sys.tracebacklimit`

Когда этой переменной присвоено целое значение, она определяет максимальное количество уровней трассировки, выводимых при необработанном исключении. По умолчанию `1000`. Если установлено `0` или меньше, вся информация трассировки подавляется и выводятся только тип и значение исключения.

#### `sys.version`

Строка, содержащая номер версии интерпретатора Python, а также дополнительную информацию о номере сборки и используемом компиляторе. Эта строка отображается при запуске интерактивного интерпретатора. Не извлекайте информацию о версии из неё; вместо этого используйте [`version_info`](https://python-all.ru/3.4/library/sys.html#sys.version_info) и функции, предоставляемые модулем [`platform`](https://python-all.ru/3.4/library/platform.html#module-platform).

#### `sys.api_version`

Версия C API для данного интерпретатора. Программисты могут счесть это полезным при отладке конфликтов версий между Python и модулями расширения.

#### `sys.version_info`

Кортеж, содержащий пять компонентов номера версии: *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` и так далее.

Изменено в версии 3.1: Добавлены именованные атрибуты компонентов.

#### `sys.warnoptions`

Это деталь реализации инфраструктуры предупреждений; не изменяйте это значение. Обратитесь к модулю [`warnings`](https://python-all.ru/3.4/library/warnings.html#module-warnings) для получения дополнительной информации об инфраструктуре предупреждений.

#### `sys.winver`

Номер версии, используемый для формирования ключей реестра на платформах Windows. Он хранится как строковый ресурс 1000 в DLL Python. Обычно это значение представляет собой первые три символа [`version`](https://python-all.ru/3.4/library/sys.html#sys.version). Он предоставляется в модуле [`sys`](https://python-all.ru/3.4/library/sys.html#module-sys) в информационных целях; изменение этого значения не влияет на ключи реестра, используемые Python. Доступность: Windows.

#### `sys._xoptions`

Словарь различных флагов, зависящих от реализации, переданных через параметр командной строки [*-X*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-X). Имена опций либо сопоставляются с их значениями, если они заданы явно, либо с [`True`](https://python-all.ru/3.4/library/constants.html#True). Пример:

```python
$ ./python -Xa=b -Xc
Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys._xoptions
{'a': 'b', 'c': True}
```

**Особая деталь реализации CPython:** Это специфичный для CPython способ доступа к параметрам, переданным через [*-X*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-X). Другие реализации могут экспортировать их другими способами или не экспортировать вовсе.

Новое в версии 3.2.

Ссылки

| [\[C99\]](https://python-all.ru/3.4/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.4/library/sys.html). |
| --- | --- |
