sys — Параметры и функции, специфичные для системы


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

sys.abiflags

На POSIX-системах, где Python был собран с помощью стандартного сценария configure, он содержит флаги ABI, указанные в PEP 3149.

Изменено в версии 3.8: Флаги по умолчанию стали пустой строкой (флаг m для pymalloc был удален).

Добавлено в версии 3.2.

sys.addaudithook(hook)

Добавляет вызываемый hook в список активных крючков аудита для текущего (под)интерпретатора.

Когда событие аудита поднимается через функцию sys.audit(), каждый хук будет вызван в том порядке, в котором он был добавлен с именем события и кортежем аргументов. Сначала вызываются нативные хуки, добавленные с помощью PySys_AddAuditHook(), затем хуки, добавленные в текущем (под)интерпретаторе. Крючки могут регистрировать событие, вызывать исключение для прерывания операции или полностью завершать процесс.

Вызывает auditing event sys.addaudithook без аргументов.

Смотрите audit events table для всех событий, вызываемых CPython, и PEP 578 для обсуждения оригинального дизайна.

Добавлено в версии 3.8.

Изменено в версии 3.8.1: Исключения, возникающие при Exception, но не при RuntimeError, больше не подавляются.

CPython implementation detail: Если трассировка включена (см. settrace()), крючки Python отслеживаются только в том случае, если вызываемая программа имеет член __cantrace__, который установлен в значение true. В противном случае функции трассировки будут пропускать хук.

sys.argv

Список аргументов командной строки, передаваемых сценарию Python. argv[0] - это имя скрипта (зависит от операционной системы, является ли оно полным именем пути или нет). Если команда была выполнена с помощью опции командной строки интерпретатора -c, argv[0] устанавливается в строку '-c'. Если интерпретатору Python не было передано имя сценария, argv[0] будет пустой строкой.

Чтобы просмотреть стандартный ввод или список файлов, заданных в командной строке, смотрите модуль fileinput.

См. также sys.orig_argv.

Примечание

В Unix аргументы командной строки передаются байтами из ОС. Python декодирует их с помощью кодировки файловой системы и обработчика ошибок «surrogateescape». Когда вам нужны оригинальные байты, вы можете получить их с помощью [os.fsencode(arg) for arg in sys.argv].

sys.audit(event, *args)

Вызывает событие аудита и запускает все активные крючки аудита. event - это строка, идентифицирующая событие, а args может содержать необязательные аргументы с дополнительной информацией о событии. Количество и типы аргументов для данного события считаются общедоступным и стабильным API и не должны изменяться между выпусками.

Например, одно событие аудита называется os.chdir. Это событие имеет один аргумент path, который будет содержать запрашиваемый новый рабочий каталог.

sys.audit() вызовет существующие крючки аудита, передавая имя события и аргументы, и повторно поднимет первое исключение из любого крючка. В общем случае, если возникло исключение, его не следует обрабатывать, а процесс должен быть завершен как можно быстрее. Это позволяет реализации хуков решать, как реагировать на конкретные события: они могут просто регистрировать событие или прервать операцию, вызвав исключение.

Крючки добавляются с помощью функций sys.addaudithook() или PySys_AddAuditHook().

Родной эквивалент этой функции - PySys_Audit(). Использование родной функции предпочтительнее, когда это возможно.

Смотрите audit events table для всех событий, вызываемых CPython.

Добавлено в версии 3.8.

sys.base_exec_prefix

Устанавливается во время запуска Python, перед запуском site.py, на то же значение, что и exec_prefix. Если он не запущен в virtual environment, значения останутся прежними; если site.py обнаружит, что используется виртуальная среда, значения prefix и exec_prefix будут изменены, чтобы указывать на виртуальную среду, тогда как base_prefix и base_exec_prefix будут по-прежнему указывать на базовую установку Python (ту, из которой была создана виртуальная среда).

Добавлено в версии 3.3.

sys.base_prefix

Устанавливается во время запуска Python, перед запуском site.py, на то же значение, что и prefix. Если он не запущен в virtual environment, значения останутся прежними; если site.py обнаружит, что используется виртуальная среда, значения prefix и exec_prefix будут изменены, чтобы указывать на виртуальную среду, тогда как base_prefix и base_exec_prefix будут по-прежнему указывать на базовую установку Python (ту, из которой была создана виртуальная среда).

Добавлено в версии 3.3.

sys.byteorder

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

sys.builtin_module_names

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

См. также список sys.stdlib_module_names.

sys.call_tracing(func, args)

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

sys.copyright

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

sys._clear_type_cache()

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

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

sys._current_frames()

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

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

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

Вызывает auditing event sys._current_frames без аргументов.

sys._current_exceptions()

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

Это наиболее полезно для статистического профилирования.

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

Вызывает auditing event sys._current_exceptions без аргументов.

sys.breakpointhook()

Эта функция hook вызывается встроенной функцией breakpoint(). По умолчанию она перебрасывает вас в отладчик pdb, но ее можно установить на любую другую функцию, чтобы вы могли выбирать, какой отладчик будет использоваться.

Подпись этой функции зависит от того, что она вызывает. Например, привязка по умолчанию (например, pdb.set_trace()) не ожидает никаких аргументов, но вы можете привязать ее к функции, которая ожидает дополнительных аргументов (позиционных и/или ключевых). Встроенная функция breakpoint() передает свои *args и **kws прямо. Все, что возвращает breakpointhooks(), возвращается из breakpoint().

В реализации по умолчанию сначала проверяется переменная окружения PYTHONBREAKPOINT. Если она установлена в значение "0", то эта функция возвращается немедленно, т.е. она является безотказной. Если переменная окружения не установлена или установлена в пустую строку, вызывается pdb.set_trace(). В противном случае эта переменная должна назвать функцию для запуска, используя номенклатуру Python с точечным импортом, например, package.subpackage.module.function. В этом случае импортируется package.subpackage.module, и в результирующем модуле должна быть вызываемая функция с именем function(). Он запускается, передавая *args и **kws, и все, что возвращает function(), sys.breakpointhook() возвращает встроенной функции breakpoint().

Обратите внимание, что если что-то пойдет не так во время импорта вызываемой переменной с именем PYTHONBREAKPOINT, будет сообщено RuntimeWarning и точка останова будет проигнорирована.

Также обратите внимание, что если sys.breakpointhook() переопределяется программно, PYTHONBREAKPOINT не обращается.

Добавлено в версии 3.7.

sys._debugmallocstats()

Печать низкоуровневой информации в stderr о состоянии распределителя памяти CPython.

Если Python собирается в режиме отладки <debug-build> (configure --with-pydebug option), он также выполняет некоторые дорогостоящие проверки внутренней согласованности.

Добавлено в версии 3.3.

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

sys.dllhandle

Целое число, указывающее дескриптор библиотеки Python DLL.

Availability: Windows.

sys.displayhook(value)

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

sys.displayhook вызывается по результату оценки expression, введенного в интерактивной сессии Python. Отображение этих значений можно настроить, присвоив sys.displayhook другую одноаргументную функцию.

Псевдокод:

def displayhook(value):
    if value is None:
        return
    # Set '_' to None to avoid recursion
    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.

sys.dont_write_bytecode

Если это значение истинно, Python не будет пытаться писать .pyc файлы при импорте исходных модулей. Это значение изначально установлено в True или False в зависимости от опции командной строки -B и переменной окружения PYTHONDONTWRITEBYTECODE, но вы можете установить его самостоятельно, чтобы контролировать генерацию файлов байткода.

sys.pycache_prefix

Если это значение установлено (не None), Python будет записывать файлы кэша байткода .pyc в (и читать их из) параллельного дерева каталогов, корнем которого является этот каталог, а не из __pycache__ каталогов в дереве исходного кода. Любые каталоги __pycache__ в дереве исходного кода будут игнорироваться, а новые файлы .pyc будут записываться с префиксом pycache. Таким образом, если вы используете compileall в качестве шага предварительной сборки, вы должны убедиться, что вы запускаете его с тем же префиксом pycache (если таковой имеется), который вы будете использовать во время выполнения.

Относительный путь интерпретируется относительно текущего рабочего каталога.

Это значение изначально устанавливается на основе значения опции командной строки -X pycache_prefix=PATH или переменной окружения PYTHONPYCACHEPREFIX (приоритет имеет командная строка). Если ни то, ни другое не установлено, то это значение равно None.

Добавлено в версии 3.8.

sys.excepthook(type, value, traceback)

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

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

Вызывает auditing event sys.excepthook с аргументами hook, type, value, traceback.

См.также

Функция sys.unraisablehook() обрабатывает неустранимые исключения, а функция threading.excepthook() обрабатывает исключение, вызванное threading.Thread.run().

sys.__breakpointhook__
sys.__displayhook__
sys.__excepthook__
sys.__unraisablehook__

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

Добавлено в версии 3.7: __breakpointhook__

Добавлено в версии 3.8: __unraisablehook__

sys.exc_info()

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

Если нигде в стеке не обрабатывается исключение, возвращается кортеж, содержащий три значения None. В противном случае возвращаются значения (type, value, traceback). Их значение следующее: type получает тип обрабатываемого исключения (подкласс BaseException); value получает экземпляр исключения (экземпляр типа исключения); traceback получает traceback object, который содержит стек вызовов в точке, где первоначально произошло исключение.

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.

Примечание

Если действует virtual environment, это значение будет изменено в site.py, чтобы указать на виртуальную среду. Значение для установки Python по-прежнему будет доступно через base_exec_prefix.

sys.executable

Строка, указывающая абсолютный путь к исполняемому двоичному файлу для интерпретатора Python, в системах, где это имеет смысл. Если Python не может получить реальный путь к исполняемому файлу, sys.executable будет пустой строкой или None.

sys.exit([arg])

Вызвать исключение SystemExit, сигнализирующее о намерении выйти из интерпретатора.

Необязательный аргумент arg может быть целым числом, дающим статус завершения (по умолчанию равен нулю), или объектом другого типа. Если это целое число, то ноль считается «успешным завершением», а любое ненулевое значение считается «ненормальным завершением» в оболочках и тому подобных программах. Большинство систем требуют, чтобы оно находилось в диапазоне 0–127, и в противном случае выдают неопределенные результаты. В некоторых системах существует соглашение о присвоении специфических значений определенным кодам выхода, но оно, как правило, недостаточно разработано; программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех других видов ошибок. Если передается объект другого типа, None эквивалентен передаче нуля, а любой другой объект выводится на stderr и приводит к коду выхода 1. В частности, sys.exit("some error message") - это быстрый способ выйти из программы при возникновении ошибки.

Поскольку exit() в конечном итоге «только» вызывает исключение, он завершает процесс только при вызове из главного потока, и исключение не перехватывается. Действия по очистке, указанные в пунктах finally операторов try, выполняются, и можно перехватить попытку выхода на внешнем уровне.

Изменено в версии 3.6: Если в процессе очистки возникает ошибка после того, как интерпретатор Python поймал SystemExit (например, ошибка при промывке буферизованных данных в стандартных потоках), статус выхода изменяется на 120.

sys.flags

Атрибут named tuple flags отображает состояние флагов командной строки. Атрибуты доступны только для чтения.

атрибут

флаг

debug

-d

inspect

-i

interactive

-i

isolated

-I

optimize

-O или -OO

dont_write_bytecode

-B

no_user_site

-s

no_site

-S

ignore_environment

-E

verbose

-v

bytes_warning

-b

quiet

-q

hash_randomization

-R

dev_mode

-X dev (Python Development Mode)

utf8_mode

-X utf8

Изменено в версии 3.2: Добавлен атрибут quiet для нового флага -q.

Добавлено в версии 3.2.3: Атрибут hash_randomization.

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

Изменено в версии 3.4: Добавлен атрибут isolated для флага -I isolated.

Изменено в версии 3.7: Добавлен атрибут dev_mode для нового флага Python Development Mode и атрибут utf8_mode для нового флага -X utf8.

sys.float_info

named tuple содержит информацию о типе float. Он содержит низкоуровневую информацию о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей точкой, определенным в стандартном заголовочном файле float.h для языка программирования „C“; подробнее см. раздел 5.2.4.2.2 стандарта ISO/IEC C [C99] 1999 года «Характеристики плавающих типов».

атрибут

макрос float.h

объяснение

epsilon

макрос float.h

разность между 1,0 и наименьшим значением, большим 1,0, которое можно представить в виде плавающей величины

См. также math.ulp().

dig

DBL_DIG

максимальное количество десятичных цифр, которое может быть достоверно представлено в плавающей форме; см. ниже

mant_dig

DBL_MANT_DIG

точность float: количество цифр base-radix в значащем числе float

max

DBL_MAX

максимальное представимое положительное конечное число

max_exp

DBL_MAX_EXP

максимальное целое число e такое, что radix**(e-1) является представимым конечным числом с плавающей точкой

max_10_exp

DBL_MAX_10_EXP

максимальное целое число e такое, что 10**e находится в диапазоне представимых конечных плавающих чисел

min

DBL_MIN

минимально представимое положительное нормализованное плавающее число

Используйте math.ulp(0.0) для получения наименьшего положительного денормализованного представимого числа.

min_exp

DBL_MIN_EXP

минимальное целое число e такое, что radix**(e-1) является нормализованной плавающей точкой

min_10_exp

DBL_MIN_10_EXP

минимальное целое число e такое, что 10**e является нормализованной плавающей точкой

radix

FLT_RADIX

радикс представления экспоненты

rounds

FLT_ROUNDS

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

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

>>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979'    # decimal string with 15 significant digits
>>> format(float(s), '.15g')  # convert to float and back -> same value
'3.14159265358979'

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

>>> s = '9876543211234567'    # 16 significant digits is too many!
>>> format(float(s), '.16g')  # conversion changes value
'9876543211234568'
sys.float_repr_style

Строка, указывающая, как ведет себя функция 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() и gc.collect() для получения более предсказуемых результатов.

Если сборка или реализация Python не может разумно вычислить эту информацию, то вместо getallocatedblocks() разрешается возвращать 0.

Добавлено в версии 3.4.

sys.getandroidapilevel()

Возвращает версию API Android на момент сборки в виде целого числа.

Availability: Android.

Добавлено в версии 3.7.

sys.getdefaultencoding()

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

sys.getdlopenflags()

Возвращает текущее значение флагов, которые используются для вызовов dlopen(). Символические имена значений флагов можно найти в модуле os (константы RTLD_xxx, например os.RTLD_LAZY).

Availability: Unix.

sys.getfilesystemencoding()

Получите filesystem encoding: кодировку, используемую с filesystem error handler для преобразования между именами файлов Unicode и байтовыми именами файлов. Обработчик ошибок файловой системы возвращается из getfilesystemencoding().

Для лучшей совместимости для имен файлов во всех случаях следует использовать str, хотя представление имен файлов в виде байтов также поддерживается. Функции, принимающие или возвращающие имена файлов, должны поддерживать либо str, либо bytes и внутренне преобразовывать их в предпочтительное представление системы.

os.fsencode() и os.fsdecode() должны использоваться для обеспечения правильной кодировки и режима ошибок.

filesystem encoding and error handler конфигурируются при запуске Python функцией PyConfig_Read(): см. члены filesystem_encoding и filesystem_errors PyConfig.

Изменено в версии 3.2: Результат getfilesystemencoding() уже не может быть None.

Изменено в версии 3.6: Windows больше не гарантирует возврат 'mbcs'. Для получения дополнительной информации смотрите PEP 529 и _enablelegacywindowsfsencoding().

Изменено в версии 3.7: Возвращает 'utf-8', если Python UTF-8 Mode включен.

sys.getfilesystemencodeerrors()

Получите filesystem error handler: обработчик ошибок, используемый с filesystem encoding для преобразования между именами файлов Unicode и именами байтов. Кодировка файловой системы возвращается из getfilesystemencoding().

os.fsencode() и os.fsdecode() должны использоваться для обеспечения правильной кодировки и режима ошибок.

filesystem encoding and error handler конфигурируются при запуске Python функцией PyConfig_Read(): см. члены filesystem_encoding и filesystem_errors PyConfig.

Добавлено в версии 3.6.

sys.getrefcount(object)

Возвращает счетчик ссылок на объект. Возвращаемый счетчик обычно на единицу больше, чем вы ожидаете, потому что он включает (временную) ссылку в качестве аргумента для getrefcount().

sys.getrecursionlimit()

Возвращает текущее значение предела рекурсии, максимальной глубины стека интерпретатора Python. Этот предел предотвращает бесконечную рекурсию от переполнения стека C и аварийного завершения работы Python. Он может быть установлен командой setrecursionlimit().

sys.getsizeof(object[, default])

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

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

Если задано, будет возвращено значение default, если объект не предоставляет средств для получения размера. В противном случае будет вызвана ошибка TypeError.

getsizeof() вызывает метод объекта __sizeof__ и добавляет дополнительные накладные расходы на сборщик мусора, если объект управляется сборщиком мусора.

Смотрите recursive sizeof recipe пример рекурсивного использования getsizeof() для нахождения размера контейнеров и всего их содержимого.

sys.getswitchinterval()

Возвращает «интервал переключения потоков» интерпретатора; см. setswitchinterval().

Добавлено в версии 3.2.

sys._getframe([depth])

Возвращает объект фрейма из стека вызовов. Если указано необязательное целое число depth, возвращается объект фрейма на столько вызовов ниже вершины стека. Если это глубже, чем стек вызовов, то выдается ValueError. По умолчанию depth равно нулю, возвращая фрейм на вершине стека вызовов.

Вызывает auditing event sys._getframe без аргументов.

CPython implementation detail: Эта функция должна использоваться только для внутренних и специализированных целей. Не гарантируется ее существование во всех реализациях Python.

sys.getprofile()

Получить функцию профилировщика, заданную командой setprofile().

sys.gettrace()

Получить функцию трассировки, заданную командой settrace().

CPython implementation detail: Функция gettrace() предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия и тому подобного. Ее поведение является частью платформы реализации, а не частью определения языка, и поэтому она может быть доступна не во всех реализациях Python.

sys.getwindowsversion()

Возвращает именованный кортеж, описывающий текущую версию Windows. Именованными элементами являются major, minor, build, platform, service_pack, service_pack_minor, service_pack_major, suite_mask, product_type и platform_version. service_pack содержит строку, platform_version - 3-кортеж, а все остальные значения являются целыми числами. К компонентам также можно обращаться по имени, поэтому sys.getwindowsversion()[0] эквивалентно sys.getwindowsversion().major. Для совместимости с предыдущими версиями, только первые 5 элементов можно получить по индексу.

платформа будет 2 (VER_PLATFORM_WIN32_NT).

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

Постоянная

Значение

1 (VER_NT_WORKSTATION)

Система представляет собой рабочую станцию.

2 (VER_NT_DOMAIN_CONTROLLER)

Система является контроллером домена.

3 (VER_NT_SERVER)

Система является сервером, но не контроллером домена.

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

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

Примечание

platform_version берет версию из kernel32.dll, которая может отличаться от версии ОС. Для получения точной версии ОС используйте модуль platform.

Availability: Windows.

Изменено в версии 3.2: Изменен на именованный кортеж и добавлены service_pack_minor, service_pack_major, suite_mask и product_type.

Изменено в версии 3.6: Добавлена платформа_версии.

sys.get_asyncgen_hooks()

Возвращает объект asyncgen_hooks, который похож на namedtuple вида (firstiter, finalizer), где firstiter и finalizer ожидаются как None или функции, принимающие asynchronous generator iterator в качестве аргумента, и используются для планирования финализации асинхронного генератора циклом событий.

Добавлено в версии 3.6: Более подробную информацию см. в разделе PEP 525.

Примечание

Эта функция была добавлена на временной основе (подробнее см. PEP 411).

sys.get_coroutine_origin_tracking_depth()

Получение текущей глубины отслеживания начала кориутины, заданной командой set_coroutine_origin_tracking_depth().

Добавлено в версии 3.7.

Примечание

Эта функция была добавлена на временной основе (подробнее см. PEP 411). Используйте ее только в целях отладки.

sys.hash_info

named tuple, задающий параметры реализации числового хэша. Более подробно о хешировании числовых типов смотрите Хеширование числовых типов.

атрибут

объяснение

width

ширина в битах, используемая для хэш-значений

modulus

простой модуль P, используемый для схемы числового хэширования

inf

хэш-значение, возвращаемое для положительной бесконечности

nan

(этот атрибут больше не используется)

imag

множитель, используемый для мнимой части комплексного числа

algorithm

имя алгоритма для хэширования строк, байтов и просмотра памяти

hash_bits

внутренний выходной размер хэш-алгоритма

seed_bits

размер начального ключа хэш-алгоритма

Добавлено в версии 3.2.

Изменено в версии 3.4: Добавлены алгоритм, hash_bits и seed_bits.

sys.hexversion

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

if sys.hexversion >= 0x010502F0:
    # use some advanced feature
    ...
else:
    # use an alternative implementation or warn the user
    ...

Это называется hexversion, так как он действительно выглядит осмысленным, только если рассматривать его как результат передачи встроенной функции hex(). Для более удобного для человека кодирования той же информации можно использовать named tuple sys.version_info.

Более подробную информацию о hexversion можно найти на сайте Версионирование API и ABI.

sys.implementation

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

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

version - это именованный кортеж, в том же формате, что и 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 это одно и то же значение, поскольку он является эталонной реализацией.

hexversion - это версия реализации в шестнадцатеричном формате, например sys.hexversion.

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

sys.implementation может содержать дополнительные атрибуты, специфичные для реализации Python. Эти нестандартные атрибуты должны начинаться с символа подчеркивания и здесь не описываются. Независимо от своего содержимого, sys.implementation не изменяется ни во время запуска интерпретатора, ни между версиями реализации. (Однако он может меняться между версиями языка Python.) Дополнительную информацию см. в разделе PEP 421.

Добавлено в версии 3.3.

Примечание

Добавление новых необходимых атрибутов должно проходить через обычный процесс PEP. См. раздел PEP 421 для получения дополнительной информации.

sys.int_info

Атрибут named tuple, содержащий информацию о внутреннем представлении целых чисел в Python. Атрибуты доступны только для чтения.

Атрибут

Пояснение

bits_per_digit

количество битов, хранящихся в каждом разряде. Целые числа Python внутренне хранятся в базе 2**int_info.bits_per_digit.

sizeof_digit

размер в байтах типа C, используемого для представления цифры

Добавлено в версии 3.1.

sys.__interactivehook__

Когда этот атрибут существует, его значение автоматически вызывается (без аргументов) при запуске интерпретатора в interactive mode. Это делается после чтения файла PYTHONSTARTUP, чтобы вы могли установить там этот хук. Модуль site sets this.

Вызывает auditing event cpython.run_interactivehook с аргументом hook.

Добавлено в версии 3.4.

sys.intern(string)

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

Интернированные строки не бессмертны; чтобы воспользоваться ими, необходимо сохранить ссылку на возвращаемое значение intern().

sys.is_finalizing()

Возвращает True, если интерпретатор Python является shutting down, False в противном случае.

Добавлено в версии 3.5.

sys.last_type
sys.last_value
sys.last_traceback

Эти три переменные не всегда определены; они устанавливаются, когда исключение не обрабатывается, и интерпретатор печатает сообщение об ошибке и отслеживание стека. Их предназначение - позволить интерактивному пользователю импортировать модуль отладчика и заняться посмертной отладкой без повторного выполнения команды, вызвавшей ошибку. (Обычно используется import pdb; pdb.pm() для входа в модуль посмертной отладки; более подробную информацию см. в модуле pdb).

Значение переменных такое же, как и у возвращаемых значений из exc_info() выше.

sys.maxsize

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

sys.maxunicode

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

Изменено в версии 3.3: До PEP 393, sys.maxunicode раньше было 0xFFFF или 0x10FFFF, в зависимости от опции конфигурации, которая указывала, хранятся ли символы Unicode как UCS-2 или UCS-4.

sys.meta_path

Список объектов meta path finder, у которых вызываются их методы find_spec(), чтобы проверить, может ли один из объектов найти импортируемый модуль. По умолчанию он содержит объекты, реализующие стандартную семантику импорта Python. Метод find_spec() вызывается как минимум с абсолютным именем импортируемого модуля. Если импортируемый модуль содержится в пакете, то в качестве второго аргумента передается атрибут родительского пакета __path__. Метод возвращает module spec, или None, если модуль не может быть найден.

См.также

importlib.abc.MetaPathFinder

Абстрактный базовый класс, определяющий интерфейс объектов finder на meta_path.

importlib.machinery.ModuleSpec

Конкретный класс, экземпляры которого должен возвращать find_spec().

Изменено в версии 3.4: Module specs были введены в Python 3.4, по PEP 451. Более ранние версии Python искали метод под названием find_module(). Он по-прежнему вызывается в качестве запасного варианта, если у записи meta_path нет метода find_spec().

sys.modules

Это словарь, который сопоставляет имена модулей с модулями, которые уже были загружены. Этим можно манипулировать для принудительной перезагрузки модулей и других трюков. Однако замена словаря не всегда будет работать так, как ожидается, а удаление существенных элементов из словаря может привести к сбою Python. Если вы хотите выполнить итерацию по этому глобальному словарю, всегда используйте sys.modules.copy() или tuple(sys.modules), чтобы избежать исключений, поскольку его размер может измениться во время итерации как побочный эффект кода или активности в других потоках.

sys.orig_argv

Список исходных аргументов командной строки, переданных исполняемому файлу Python.

См. также sys.argv.

Добавлено в версии 3.10.

sys.path

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

Как инициализируется при запуске программы, первый элемент этого списка, path[0], является каталогом, содержащим скрипт, который был использован для вызова интерпретатора Python. Если каталог скрипта недоступен (например, если интерпретатор вызывается интерактивно или если скрипт считывается из стандартного ввода), path[0] - пустая строка, которая направляет Python сначала искать модули в текущем каталоге. Обратите внимание, что каталог скрипта вставляется перед записями, вставленными в результате PYTHONPATH.

Программа может свободно изменять этот список для своих целей. В sys.path следует добавлять только строки и байты; все остальные типы данных игнорируются при импорте.

См.также

Модуль site Здесь описывается использование файлов .pth для расширения sys.path.

sys.path_hooks

Список вызываемых переменных, которые принимают аргумент path и пытаются создать finder для пути. Если искатель может быть создан, он должен быть возвращен вызываемой переменной, в противном случае вызовите ImportError.

Первоначально указывается в PEP 302.

sys.path_importer_cache

Словарь, действующий как кэш для объектов finder. Ключами являются пути, которые были переданы в sys.path_hooks, а значениями - найденные искатели. Если путь является действительным путем файловой системы, но ни один искатель не найден на sys.path_hooks, то сохраняется None.

Первоначально указывается в PEP 302.

Изменено в версии 3.3: None сохраняется вместо imp.NullImporter, если не найдено ни одного искателя.

sys.platform

Эта строка содержит идентификатор платформы, который можно использовать, например, для добавления специфических для платформы компонентов к sys.path.

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

if sys.platform.startswith('freebsd'):
    # FreeBSD-specific code here...
elif sys.platform.startswith('linux'):
    # Linux-specific code here...
elif sys.platform.startswith('aix'):
    # AIX-specific code here...

Для других систем значения следующие:

Система

platform значение

AIX

'aix'

Linux

'linux'

Windows

'win32'

Windows/Cygwin

'cygwin'

macOS

'darwin'

Изменено в версии 3.3: В Linux sys.platform больше не содержит основной версии. Это всегда 'linux', вместо 'linux2' или 'linux3'. Поскольку старые версии Python включают номер версии, рекомендуется всегда использовать представленную выше идиому startswith.

Изменено в версии 3.8: На AIX, sys.platform больше не содержит основную версию. Это всегда 'aix', вместо 'aix5' или 'aix7'. Поскольку старые версии Python включают номер версии, рекомендуется всегда использовать представленную выше идиому startswith.

См.также

os.name имеет более грубую детализацию. os.uname() дает системно-зависимую информацию о версии.

Модуль platform обеспечивает детальную проверку идентичности системы.

sys.platlibdir

Имя каталога библиотеки для конкретной платформы. Используется для построения пути стандартной библиотеки и путей установленных модулей расширения.

На большинстве платформ он равен "lib". На Fedora и SuSE он равен "lib64" на 64-битных платформах, что дает следующие sys.path пути (где X.Y - версия Python major.minor):

  • /usr/lib64/pythonX.Y/: Стандартная библиотека (как os.py из модуля os)

  • /usr/lib64/pythonX.Y/lib-dynload/: Модули расширения C стандартной библиотеки (как и модуль errno, точное имя файла зависит от платформы)

  • /usr/lib/pythonX.Y/site-packages/ (всегда используйте lib, а не sys.platlibdir): Сторонние модули

  • /usr/lib64/pythonX.Y/site-packages/: Модули расширения C сторонних пакетов

Добавлено в версии 3.9.

sys.prefix

Строка, задающая префикс каталога, в который устанавливаются независимые от платформы файлы Python; на Unix по умолчанию '/usr/local'. Он может быть задан во время сборки с помощью аргумента --prefix в сценарии configure. Производные пути см. в Пути установки.

Примечание

Если действует virtual environment, это значение будет изменено в site.py, чтобы указать на виртуальную среду. Значение для установки Python по-прежнему будет доступно через base_prefix.

sys.ps1
sys.ps2

Строки, определяющие первичный и вторичный запрос интерпретатора. Они определяются только в том случае, если интерпретатор находится в интерактивном режиме. Их начальными значениями в этом случае являются '>>> ' и '... '. Если любой из переменных присвоен нестроковый объект, то его str() переоценивается каждый раз, когда интерпретатор готовится прочитать новую интерактивную команду; это может быть использовано для реализации динамической подсказки.

sys.setdlopenflags(n)

Устанавливает флаги, используемые интерпретатором для вызовов dlopen(), например, когда интерпретатор загружает модули расширения. Помимо прочего, это позволит лениво разрешать символы при импорте модуля, если вызвать его как sys.setdlopenflags(0). Чтобы разделить символы между модулями расширения, вызовите sys.setdlopenflags(os.RTLD_GLOBAL). Символические имена для значений флагов можно найти в модуле os (константы RTLD_xxx, например os.RTLD_LAZY).

Availability: Unix.

sys.setprofile(profilefunc)

Установите функцию профиля системы, которая позволяет реализовать профилировщик исходного кода Python на языке Python. Дополнительную информацию о профилировщике Python см. в главе Профилировщики Python. Функция профиля системы вызывается аналогично функции трассировки системы (см. settrace()), но вызывается с разными событиями, например, она не вызывается для каждой выполненной строки кода (только при вызове и возврате, но событие возврата сообщается, даже если было установлено исключение). Функция специфична для потоков, но у профайлера нет способа узнать о переключении контекста между потоками, поэтому ее не имеет смысла использовать при наличии нескольких потоков. Кроме того, ее возвращаемое значение не используется, поэтому она может просто вернуть None. Ошибка в функции профайлера приведет к тому, что она сама себя отменит.

Профильные функции должны иметь три аргумента: frame, event и arg. frame - это текущий фрейм стека. event - это строка: 'call', 'return', 'c_call', 'c_return' или 'c_exception'. arg зависит от типа события.

Вызывает auditing event sys.setprofile без аргументов.

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

'call'

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

'return'

Функция (или другой блок кода) вот-вот вернется. Вызывается функция profile; arg - значение, которое будет возвращено, или None, если событие вызвано возникновением исключения.

'c_call'

Сейчас будет вызвана функция языка Си. Это может быть функция расширения или встроенная функция. arg - это объект функции Си.

'c_return'

Функция C вернулась. arg - это объект функции Си.

'c_exception'

Функция языка Си вызвала исключение. arg - это объект функции Си.

sys.setrecursionlimit(limit)

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

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

Если новый предел слишком мал при текущей глубине рекурсии, возникает исключение RecursionError.

Изменено в версии 3.5.1: Исключение RecursionError теперь вызывается, если новый предел слишком мал при текущей глубине рекурсии.

sys.setswitchinterval(interval)

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

Добавлено в версии 3.2.

sys.settrace(tracefunc)

Устанавливает функцию трассировки системы, которая позволяет реализовать отладчик исходного кода Python на языке Python. Функция зависит от потока; чтобы отладчик поддерживал несколько потоков, он должен зарегистрировать функцию трассировки с помощью settrace() для каждого отлаживаемого потока или использовать threading.settrace().

Функции трассировки должны иметь три аргумента: frame, event и arg. frame - это текущий кадр стека. event - это строка: 'call', 'line', 'return', 'exception' или 'opcode'. arg зависит от типа события.

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

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

Если в функции трассировки произошла какая-либо ошибка, она будет снята, так же как и при вызове settrace(None).

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

'call'

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

'line'

Интерпретатор собирается выполнить новую строку кода или повторно выполнить условие цикла. Вызывается локальная функция трассировки; arg - None; возвращаемое значение определяет новую локальную функцию трассировки. Подробное объяснение того, как это работает, см. в Objects/lnotab_notes.txt. Перлинейные события могут быть отключены для кадра путем установки f_trace_lines в False на этом кадре.

'return'

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

'exception'

Произошло исключение. Вызывается локальная функция трассировки; arg - кортеж (exception, value, traceback); возвращаемое значение задает новую локальную функцию трассировки.

'opcode'

Интерпретатор собирается выполнить новый опкод (подробности об опкоде см. в dis). Вызывается локальная функция трассировки; arg - это None; возвращаемое значение определяет новую локальную функцию трассировки. По умолчанию события для каждого опкода не испускаются: они должны быть явно запрошены установкой f_trace_opcodes на True в кадре.

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

Для более тонкого использования можно установить функцию трассировки, назначив frame.f_trace = tracefunc явно, а не полагаясь на то, что она будет установлена косвенно через возвращаемое значение уже установленной функции трассировки. Это также необходимо для активации функции трассировки на текущем кадре, чего не делает settrace(). Обратите внимание, что для того, чтобы это работало, глобальная функция трассировки должна быть установлена с помощью settrace(), чтобы включить механизм трассировки во время выполнения, но это не обязательно должна быть та же самая функция трассировки (например, это может быть функция трассировки с низкой нагрузкой, которая просто возвращает None для немедленного отключения себя на каждом кадре).

Более подробную информацию об объектах кода и фрейма см. в разделе Стандартная иерархия типов.

Вызывает auditing event sys.settrace без аргументов.

CPython implementation detail: Функция settrace() предназначена только для реализации отладчиков, профилировщиков, инструментов покрытия и тому подобного. Ее поведение является частью платформы реализации, а не частью определения языка, и поэтому она может быть доступна не во всех реализациях Python.

Изменено в версии 3.7: <<<Добавлен тип события 'opcode'; добавлены атрибуты f_trace_lines и f_trace_opcodes для фреймов

sys.set_asyncgen_hooks(firstiter, finalizer)

Принимает два необязательных аргумента в виде ключевых слов, которые являются вызываемыми переменными, принимающими asynchronous generator iterator в качестве аргумента. Вызываемая переменная firstiter будет вызвана, когда асинхронный генератор будет итерироваться в первый раз. Вызывается finalizer, когда асинхронный генератор собирается в мусор.

Вызывает auditing event sys.set_asyncgen_hooks_firstiter без аргументов.

Вызывает auditing event sys.set_asyncgen_hooks_finalizer без аргументов.

Два события аудита возникают потому, что базовый API состоит из двух вызовов, каждый из которых должен вызывать свое собственное событие.

Добавлено в версии 3.6: Более подробную информацию смотрите в PEP 525, а пример метода финализатора смотрите в реализации asyncio.Loop.shutdown_asyncgens в Lib/asyncio/base_events.py.

Примечание

Эта функция была добавлена на временной основе (подробнее см. PEP 411).

sys.set_coroutine_origin_tracking_depth(depth)

Позволяет включить или выключить отслеживание происхождения coroutine. При включении атрибут cr_origin на объектах coroutine будет содержать кортеж из (имя файла, номер строки, имя функции) кортежей, описывающих отслеживание, где был создан объект coroutine, причем первым будет самый последний вызов. Если атрибут отключен, cr_origin будет равен None.

Чтобы включить, передайте значение depth больше нуля; это устанавливает количество кадров, информация о которых будет захвачена. Чтобы отключить, передайте значение depth равное нулю.

Эта настройка зависит от конкретного потока.

Добавлено в версии 3.7.

Примечание

Эта функция была добавлена на временной основе (подробнее см. PEP 411). Используйте ее только в целях отладки.

sys._enablelegacywindowsfsencoding()

Изменяет filesystem encoding and error handler на „mbcs“ и „replace“ соответственно, для согласованности с версиями Python до 3.6.

Это эквивалентно определению переменной окружения PYTHONLEGACYWINDOWSFSENCODING перед запуском Python.

См. также sys.getfilesystemencoding() и sys.getfilesystemencodeerrors().

Availability: Windows.

Добавлено в версии 3.6: Более подробную информацию см. в разделе PEP 529.

sys.stdin
sys.stdout
sys.stderr

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

  • stdin используется для всего интерактивного ввода (включая вызовы input());

  • stdout используется для вывода утверждений print() и expression, а также для подсказок input();

  • Собственные подсказки интерпретатора и его сообщения об ошибках идут в stderr.

Эти потоки являются регулярными text files, подобно потокам, возвращаемым функцией open(). Их параметры выбираются следующим образом:

  • Кодировка и обработка ошибок инициализируются из PyConfig.stdio_encoding и PyConfig.stdio_errors.

    В Windows для консольного устройства используется UTF-8. Несимвольные устройства, такие как дисковые файлы и трубы, используют кодировку системной локали (т.е. кодовую страницу ANSI). Неконсольные символьные устройства, такие как NUL (т.е. где isatty() возвращает True), используют значение кодовых страниц ввода и вывода консоли при запуске, соответственно для stdin и stdout/stderr. По умолчанию это значение равно системному locale encoding, если процесс изначально не подключен к консоли.

    Особое поведение консоли можно отменить, установив переменную окружения PYTHONLEGACYWINDOWSSTDIO перед запуском Python. В этом случае кодовые страницы консоли используются так же, как и для любого другого символьного устройства.

    На всех платформах вы можете переопределить кодировку символов, установив переменную окружения PYTHONIOENCODING перед запуском Python или используя новый параметр командной строки -X utf8 и переменную окружения PYTHONUTF8. Однако для консоли Windows это применимо только в том случае, если также установлена переменная PYTHONLEGACYWINDOWSSTDIO.

  • В интерактивном режиме поток stdout является линейно-буферизованным. В противном случае он буферизуется блоками, как обычные текстовые файлы. Поток stderr в обоих случаях является линейно-буферизованным. Вы можете сделать оба потока небуферизованными, передав опцию командной строки -u или установив переменную окружения PYTHONUNBUFFERED.

Изменено в версии 3.9: Неинтерактивный stderr теперь буферизируется по строкам вместо полной буферизации.

Примечание

Для записи или чтения двоичных данных из/в стандартные потоки используйте базовый двоичный объект buffer. Например, для записи байтов в stdout используйте sys.stdout.buffer.write(b'abc').

Однако если вы пишете библиотеку (и не контролируете, в каком контексте будет выполняться ее код), имейте в виду, что стандартные потоки могут быть заменены файлоподобными объектами типа 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.stdlib_module_names

Набор строк, содержащих имена модулей стандартной библиотеки.

Он одинаков для всех платформ. Также перечислены модули, недоступные на некоторых платформах, и модули, отключенные при сборке Python. Перечислены все виды модулей: чистый Python, встроенные, замороженные и модули расширения. Тестовые модули исключены.

Для пакетов перечисляется только основной пакет: подпакеты и подмодули не перечисляются. Например, пакет email указан, но подпакет email.mime и подмодуль email.message не указаны.

См. также список sys.builtin_module_names.

Добавлено в версии 3.10.

sys.thread_info

named tuple, содержащий информацию о реализации потока.

Атрибут

Пояснение

name

Имя реализации потока:

  • 'nt': Потоки Windows

  • 'pthread': POSIX-потоки

  • 'solaris': потоки Solaris

lock

Имя реализации блокировки:

  • 'semaphore': блокировка использует семафор

  • 'mutex+cond': блокировка использует мьютекс и переменную условия

  • None если эта информация неизвестна

version

Имя и версия библиотеки потоков. Это строка, или None, если эта информация неизвестна.

Добавлено в версии 3.3.

sys.tracebacklimit

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

sys.unraisablehook(unraisable, /)

Обработка неустранимого исключения.

Вызывается, когда произошло исключение, но у Python нет возможности его обработать. Например, когда деструктор вызывает исключение или во время сборки мусора (gc.collect()).

Аргумент unraisable имеет следующие атрибуты:

  • exc_type: Тип исключения.

  • exc_value: Значение исключения, может быть None.

  • exc_traceback: Отслеживание исключения, может быть None.

  • err_msg: Сообщение об ошибке, может быть None.

  • объект: Объект, вызвавший исключение, может быть None.

Хук по умолчанию форматирует err_msg и object как: f'{err_msg}: {object!r}'; используйте сообщение об ошибке «Exception ignored in», если err_msg равно None.

sys.unraisablehook() может быть переопределена для управления обработкой невыводимых исключений.

Хранение exc_value с помощью пользовательского хука может создать цикл ссылок. Его следует явно очистить, чтобы разорвать цикл ссылок, когда исключение больше не нужно.

Хранение object с помощью пользовательского хука может воскресить его, если он установлен на объект, который завершается. Избегайте хранения object после завершения работы пользовательского хука, чтобы избежать воскрешения объектов.

См. также excepthook(), который обрабатывает не пойманные исключения.

Вызывает auditing event sys.unraisablehook с аргументами hook, unraisable.

Добавлено в версии 3.8.

sys.version

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

sys.winver

Номер версии, используемый для формирования ключей реестра на платформах Windows. Хранится как строковый ресурс 1000 в библиотеке Python DLL. Обычно это значение представляет собой первые три символа version. Оно предоставляется в модуле sys в информационных целях; изменение этого значения не влияет на ключи реестра, используемые Python.

Availability: Windows.

sys._xoptions

Словарь различных специфических для реализации флагов, передаваемых через опцию командной строки -X. Имена опций либо сопоставляются с их значениями, если они заданы явно, либо с True. Пример:

$ ./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 implementation detail: Это специфический для CPython способ доступа к опциям, переданным через -X. Другие реализации могут экспортировать их другими способами или не экспортировать вообще.

Добавлено в версии 3.2.

Цитаты

C99

ISO/IEC 9899:1999. «Языки программирования – C». Публичный проект этого стандарта доступен по адресу https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf.

Вернуться на верх