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

28.1. sys – Системно-зависимые параметры и функцииsys – System-specific parameters and functions

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

sys.argv

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

Для циклического чтения стандартного ввода или списка файлов, переданных в командной строке, обратитесь к модулю fileinput.

sys.byteorder

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

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

sys.builtin_module_names

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

sys.call_tracing(func, args)

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

sys.copyright

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

sys._clear_type_cache()

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

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

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

sys._current_frames()

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

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

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

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

sys.dllhandle

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

sys.displayhook(value)

Если значение не равно None, эта функция выводит его в sys.stdout и сохраняет его в __builtin__._.

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

sys.dont_write_bytecode

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

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

sys.excepthook(type, value, 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). Их смысл: тип получает тип обрабатываемого исключения (объект класса); значение получает параметр исключения (его связанное значение или второй аргумент raise, который всегда является экземпляром класса, если тип исключения – объект класса); трассировка получает объект трассировки (см. Справочное руководство), который инкапсулирует стек вызовов в точке, где первоначально возникло исключение.

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

Предупреждение

Присвоение возвращаемого значения трассировка локальной переменной в функции, которая обрабатывает исключение, приведёт к циклической ссылке. Это помешает сборщику мусора удалить любые объекты, на которые ссылается локальная переменная в той же функции или трассировка. Поскольку большинству функций не нужен доступ к трассировке, лучшим решением является использование чего-то вроде exctype, value = sys.exc_info()[:2] для извлечения только типа и значения исключения. Если же трассировка всё-таки нужна, удалите её после использования (лучше всего с помощью оператора tryfinally) или вызовите exc_info() в функции, которая сама не обрабатывает исключение.

Примечание

Начиная с Python 2.2, такие циклы автоматически удаляются, когда сборка мусора включена и они становятся недостижимыми, но создание циклов по-прежнему более эффективно избегать.

sys.exc_clear()

Эта функция очищает всю информацию, относящуюся к текущему или последнему исключению произошедшему в текущем потоке. После вызова этой функции exc_info() будет возвращать три значения None до тех пор, пока не возникнет другое исключение в текущем потоке или стек выполнения не вернётся к кадру, где обрабатывается другое исключение.

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

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

sys.exc_type
sys.exc_value
sys.exc_traceback

Устарело с версии 1.5: Используйте exc_info() вместо этого.

Поскольку это глобальные переменные, они не привязаны к текущему потоку, поэтому их использование небезопасно в многопоточной программе. Когда исключение не обрабатывается, exc_type устанавливается в None, а остальные две не определены.

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, например 2.7.

sys.executable

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

sys.exit([arg])

Выход из Python. Реализуется путём возбуждения исключения SystemExit , поэтому выполняются действия очистки, заданные в предложениях finally операторов try, и можно перехватить попытку выхода на внешнем уровне.

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

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

sys.exitfunc

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

Примечание

Функция выхода не вызывается, когда программа завершается сигналом, когда обнаружена фатальная внутренняя ошибка Python или когда вызывается os._exit().

Устарело с версии 2.4: Используйте atexit вместо этого.

sys.flags

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

атрибут

флаг

debug

-d

py3k_warning

-3

division_warning

-Q

division_new

-Qnew

inspect

-i

interactive

-i

optimize

-O или -OO

dont_write_bytecode

-B

no_user_site

-s

no_site

-S

ignore_environment

-E

tabcheck

-t или -tt

verbose

-v

unicode

-U

bytes_warning

-b

hash_randomization

-R

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

Новое в версии 2.7.3: Атрибут hash_randomization.

sys.float_info

Структура structseq, содержащая информацию о типе float. Она содержит низкоуровневую информацию о точности и внутреннем представлении. Значения соответствуют различным константам с плавающей запятой, определённым в стандартном заголовочном файле float.h языка программирования C; подробнее см. раздел 5.2.4.2.2 стандарта ISO/IEC C 1999 [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 precision: the number of base-radix digits in the significand of a float

max

DBL_MAX

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

max_exp

DBL_MAX_EXP

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

max_10_exp

DBL_MAX_10_EXP

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

min

DBL_MIN

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

min_exp

DBL_MIN_EXP

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

min_10_exp

DBL_MIN_10_EXP

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

radix

FLT_RADIX

radix of exponent representation

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'    # десятичная строка с 15 значащими цифрами
>>> format(float(s), '.15g')  # Преобразование во float и обратно -> то же значение
'3.14159265358979'

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

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

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

sys.float_repr_style

Строка, указывающая, как функция repr() ведёт себя для чисел с плавающей запятой. Если строка имеет значение 'short', то для конечного числа с плавающей запятой x функция repr(x) стремится создать короткую строку со свойством float(repr(x)) == x. Это обычное поведение в Python 2.7 и более поздних версиях. В противном случае float_repr_style имеет значение 'legacy', и repr(x) ведёт себя так же, как в версиях Python до 2.7.

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

sys.getcheckinterval()

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

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

sys.getdefaultencoding()

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

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

sys.getdlopenflags()

Возвращает текущее значение флагов, используемых для вызовов dlopen(). Константы флагов определены в модулях dl и DLFCN. Доступность: Unix.

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

sys.getfilesystemencoding()

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

  • На Mac OS X кодировка – 'utf-8'.

  • В Unix кодировка определяется предпочтениями пользователя согласно результату nl_langinfo(CODESET), или None, если nl_langinfo(CODESET) завершилась ошибкой.

  • В Windows NT+ имена файлов изначально в Unicode, поэтому преобразование не выполняется. getfilesystemencoding() по-прежнему возвращает 'mbcs', так как это кодировка, которую приложения должны использовать, когда явно хотят преобразовать строки Unicode в байтовые строки, эквивалентные при использовании в качестве имён файлов.

  • В Windows 9x кодировка – 'mbcs'.

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

sys.getrefcount(object)

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

sys.getrecursionlimit()

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

sys.getsizeof(object[, default])

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

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

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

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

sys._getframe([depth])

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

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

sys.getprofile()

Возвращает профилирующую функцию, установленную с помощью setprofile().

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

sys.gettrace()

Возвращает трассировочную функцию, установленную с помощью settrace().

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

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

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.

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

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

sys.hexversion

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

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

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

hexversion представляет собой 32-битное число со следующей структурой:

Биты (порядок big endian)

Значение

1-8

PY_MAJOR_VERSION (2 в 2.1.0a3)

9-16

PY_MINOR_VERSION (1 в 2.1.0a3)

17-24

PY_MICRO_VERSION (0 в 2.1.0a3)

25-28

PY_RELEASE_LEVEL (0xA для альфа-версии, 0xB для бета-версии, 0xC для кандидата в релиз и 0xF для финальной версии)

29-32

PY_RELEASE_SERIAL (3 в 2.1.0a3, ноль для финальных версий)

Таким образом, 2.1.0a3 – это hexversion 0x020100a3.

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

sys.long_info

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

Атрибут

Пояснение

bits_per_digit

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

sizeof_digit

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

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

sys.last_type
sys.last_value
sys.last_traceback

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

Смысл переменных такой же, как у возвращаемых значений из exc_info() выше. (Поскольку существует только один интерактивный поток, потокобезопасность для этих переменных не является проблемой, в отличие от exc_type и т.д.)

sys.maxint

Наибольшее положительное целое число, поддерживаемое обычным целочисленным типом Python. Оно составляет не менее 2**31-1. Наибольшее отрицательное целое число – -maxint-1 – асимметрия возникает из-за использования двоичной арифметики в дополнительном коде.

sys.maxsize

Наибольшее положительное целое число, поддерживаемое типом Py_ssize_t платформы, и, следовательно, максимальный размер, который могут иметь списки, строки, словари и многие другие контейнеры.

sys.maxunicode

Целое число, задающее наибольший поддерживаемый код символа Unicode. Его значение зависит от параметра конфигурации, указывающего, хранятся ли символы Unicode как UCS-2 или UCS-4.

sys.meta_path

Список объектов finder, у которых вызываются методы find_module(), чтобы проверить, может ли один из объектов найти импортируемый модуль. Метод find_module() вызывается как минимум с абсолютным именем импортируемого модуля. Если импортируемый модуль содержится в пакете, то атрибут __path__ родительского пакета передаётся в качестве второго аргумента. Метод возвращает None, если модуль не найден, иначе возвращает loader.

sys.meta_path просматривается перед любыми неявными искателями по умолчанию или sys.path.

See PEP 302 for the original specification.

sys.modules

Это словарь, который сопоставляет имена модулей с уже загруженными модулями. С ним можно манипулировать, чтобы принудительно перезагрузить модули и выполнить другие трюки. Обратите внимание, что удаление модуля из этого словаря – не то же самое, что вызов reload() для соответствующего объекта модуля.

sys.path

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

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

Программа может свободно изменять этот список для своих целей.

Изменено в версии 2.3: Строки Unicode больше не игнорируются.

См. также

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

sys.path_hooks

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

Впервые описано в PEP 302.

sys.path_importer_cache

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

Впервые описано в PEP 302.

sys.platform

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

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

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

Изменено в версии 2.7.3: Поскольку множество кода проверяет sys.platform == 'linux2', и между Linux 2.x и 3.x нет существенных изменений, sys.platform всегда устанавливается в 'linux2', даже на Linux 3.x. Начиная с Python 3.3 значение всегда будет установлено в 'linux', поэтому рекомендуется всегда использовать идиому startswith, приведённую выше.

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

Система

platform значение

Linux (2.x и 3.x)

'linux2'

Windows

'win32'

Windows/Cygwin

'cygwin'

Mac OS X

'darwin'

OS/2

'os2'

OS/2 EMX

'os2emx'

RiscOS

'riscos'

AtheOS

'atheos'

См. также

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

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

sys.prefix

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

sys.ps1
sys.ps2

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

sys.py3kwarning

Булево значение, содержащее состояние флага предупреждений Python 3. Оно равно True, когда Python запущен с опцией -3. (Следует считать это значение только для чтения; установка другого значения не влияет на предупреждения Python 3.)

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

sys.setcheckinterval(interval)

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

sys.setdefaultencoding(name)

Устанавливает текущую кодировку строк по умолчанию, используемую реализацией Unicode. Если name не соответствует ни одной доступной кодировке, возбуждается LookupError. Эта функция предназначена только для использования реализацией модуля site и, при необходимости, модулем sitecustomize. После использования модулем site она удаляется из пространства имён модуля sys.

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

sys.setdlopenflags(n)

Устанавливает флаги, используемые интерпретатором для вызовов dlopen(), например, когда интерпретатор загружает модули расширений. В частности, это включает ленивое разрешение символов при импорте модуля, если вызвано как sys.setdlopenflags(0). Чтобы разделять символы между модулями расширений, вызовите как sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL). Символические имена для модулей флагов можно найти либо в модуле dl, либо в модуле DLFCN. Если DLFCN недоступен, его можно сгенерировать из /usr/include/dlfcn.h с помощью скрипта h2py. Доступность: Unix.

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

sys.setprofile(profilefunc)

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

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

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

'call'

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

'return'

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

'c_call'

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

'c_return'

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

'c_exception'

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

sys.setrecursionlimit(limit)

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

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

sys.settrace(tracefunc)

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

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

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

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

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

'call'

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

'line'

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

'return'

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

'exception'

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

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

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

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

sys.settscdump(on_flag)

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

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

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

sys.stdin
sys.stdout
sys.stderr

Файловые объекты, соответствующие потокам стандартного ввода, вывода и ошибок интерпретатора. stdin используется для всего ввода интерпретатора, кроме скриптов, включая вызовы input() и raw_input(). stdout используется для вывода операторов print и выражений, а также для подсказок input() и raw_input(). Собственные подсказки интерпретатора и (почти все) сообщения об ошибках направляются в stderr. stdout и stderr не обязательно должны быть встроенными файловыми объектами: подойдет любой объект, имеющий метод write(), принимающий строковый аргумент. (Изменение этих объектов не влияет на стандартные потоки ввода-вывода процессов, запускаемых os.popen(), os.system() или семейством функций exec*() в модуле os.)

sys.__stdin__
sys.__stdout__
sys.__stderr__

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

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

sys.subversion

Тройка (repo, branch, version), представляющая информацию Subversion об интерпретаторе Python. repo – имя репозитория, 'CPython'. branch – строка одного из видов: 'trunk', 'branches/name' или 'tags/name'. version – вывод svnversion, если интерпретатор был собран из рабочей копии Subversion; он содержит номер редакции (диапазон) и, возможно, завершающую букву 'M', если были локальные изменения. Если дерево было экспортировано (или svnversion был недоступен), это номер редакции Include/patchlevel.h, если ветка является тегом. В противном случае это None.

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

Примечание

Python теперь разрабатывается с использованием Git. В недавних выпусках исправлений Python 2.7 subversion поэтому содержит замещающую информацию. В Python 3.3 она удалена.

sys.tracebacklimit

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

sys.version

Строка, содержащая номер версии интерпретатора Python, а также дополнительную информацию о номере сборки и используемом компиляторе. Эта строка отображается при запуске интерактивного интерпретатора. Не извлекайте из неё информацию о версии; вместо этого используйте version_info и функции, предоставляемые модулем platform.

sys.api_version

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

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

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 и так далее.

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

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

sys.warnoptions

Это деталь реализации механизма предупреждений; не изменяйте это значение. Обратитесь к модулю warnings за дополнительной информацией о механизме предупреждений.

sys.winver

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

Ссылки

C99

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