Утилиты операционной системы¶Operating System Utilities
-
PyObject*
PyOS_FSPath(PyObject *path)¶ - Возвращаемое значение: новая ссылка.
Возвращает представление файловой системы для пути. Если объект является объектом
strилиbytes, то его счётчик ссылок увеличивается. Если объект реализует интерфейсos.PathLike, то__fspath__()возвращается, если он является объектомstrилиbytes. В противном случае возбуждаетсяTypeErrorи возвращаетсяNULL.Новое в версии 3.6.
-
int
Py_FdIsInteractive(FILE *fp, const char *filename)¶ Возвращает истину (ненулевое значение), если стандартный файл ввода-вывода fp с именем filename считается интерактивным. Это верно для файлов, для которых
isatty(fileno(fp))истинно. Если глобальный флагPy_InteractiveFlagустановлен в истину, эта функция также возвращает истину, если указатель filename равенNULLили если имя равно одной из строк'<stdin>'или'???'.
-
void
PyOS_BeforeFork()¶ Функция для подготовки внутреннего состояния перед ветвлением процесса. Её следует вызывать перед вызовом
fork()или любой аналогичной функции, клонирующей текущий процесс. Доступна только в системах, где определёнfork().Предупреждение
Вызов C
fork()должен выполняться только из «главного» потока («главного» интерпретатора). То же самое верно дляPyOS_BeforeFork().Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Parent()¶ Функция для обновления внутреннего состояния после ветвления процесса. Её следует вызывать из родительского процесса после вызова
fork()или любой аналогичной функции, клонирующей текущий процесс, независимо от того, успешно ли прошло клонирование. Доступна только в системах, где определёнfork().Предупреждение
Вызов C
fork()должен выполняться только из «главного» потока («главного» интерпретатора). То же самое верно дляPyOS_AfterFork_Parent().Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Child()¶ Функция для обновления внутреннего состояния интерпретатора после ветвления процесса. Её необходимо вызывать из дочернего процесса после вызова
fork()или любой аналогичной функции, клонирующей текущий процесс, если есть вероятность, что процесс снова вызовет интерпретатор Python. Доступна только в системах, где определёнfork().Предупреждение
Вызов C
fork()должен выполняться только из «главного» потока («главного» интерпретатора). То же самое верно дляPyOS_AfterFork_Child().Добавлено в версии 3.7.
См. также
os.register_at_fork()позволяет регистрировать пользовательские функции Python, которые будут вызыватьсяPyOS_BeforeFork(),PyOS_AfterFork_Parent()иPyOS_AfterFork_Child().
-
void
PyOS_AfterFork()¶ Функция для обновления некоторого внутреннего состояния после ветвления процесса; её следует вызвать в новом процессе, если интерпретатор Python будет продолжать использоваться. Если в новый процесс загружается новый исполняемый файл, эту функцию вызывать не нужно.
Устарело с версии 3.7: Эта функция заменена на
PyOS_AfterFork_Child().
-
int
PyOS_CheckStack()¶ Возвращает истину, когда интерпретатору не хватает места в стеке. Это надёжная проверка, но доступна только при определении
USE_STACKCHECK(в настоящее время в Windows с использованием компилятора Microsoft Visual C++).USE_STACKCHECKбудет определён автоматически; никогда не следует изменять это определение в своём коде.
-
PyOS_sighandler_t
PyOS_getsig(int i)¶ Возвращает текущий обработчик сигнала для сигнала i. Это тонкая обёртка вокруг
sigaction()илиsignal(). Не вызывайте эти функции напрямую!PyOS_sighandler_t– это псевдоним typedef дляvoid (*)(int).
-
PyOS_sighandler_t
PyOS_setsig(int i, PyOS_sighandler_t h)¶ Устанавливает обработчик сигнала для сигнала i равным h; возвращает старый обработчик сигнала. Это тонкая обёртка вокруг либо
sigaction(), либоsignal(). Не вызывайте эти функции напрямую!PyOS_sighandler_t– это псевдоним typedef дляvoid (*)(int).
-
wchar_t*
Py_DecodeLocale(const char* arg, size_t *size)¶ Декодирует байтовую строку из кодировки локали с помощью обработчика ошибок surrogateescape: недекодируемые байты декодируются как символы в диапазоне U+DC80..U+DCFF. Если последовательность байтов может быть декодирована как суррогатный символ, то такие байты экранируются с помощью обработчика ошибок surrogateescape вместо их декодирования.
Кодировка (от высшего приоритета к низшему):
UTF-8на macOS, Android и VxWorks;UTF-8на Windows, еслиPy_LegacyWindowsFSEncodingFlagравен нулю;UTF-8если включён режим UTF-8 Python;ASCIIесли локальLC_CTYPEравна"C",nl_langinfo(CODESET)возвращает кодировкуASCII(или псевдоним), а функцииmbstowcs()иwcstombs()используют кодировкуISO-8859-1.текущая кодировка локали.
Возвращает указатель на новую выделенную строку широких символов; для освобождения памяти используйте
PyMem_RawFree(). Если size не равенNULL, записывает количество широких символов, исключая нулевой символ, в*size.Возвращает
NULLпри ошибке декодирования или ошибке выделения памяти. Если size не равенNULL,*sizeустанавливается в(size_t)-1при ошибке памяти или в(size_t)-2при ошибке декодирования.Ошибки декодирования никогда не должны происходить, если только нет ошибки в библиотеке C.
Используйте функцию
Py_EncodeLocale()для обратного кодирования строки символов в байтовую строку.См. также
Функции
PyUnicode_DecodeFSDefaultAndSize()иPyUnicode_DecodeLocaleAndSize().Новое в версии 3.5.
Изменено в версии 3.7: Функция теперь использует кодировку UTF-8 в режиме UTF-8.
Изменено в версии 3.8: Теперь функция использует кодировку UTF-8 в Windows, если
Py_LegacyWindowsFSEncodingFlagравен нулю;
-
char*
Py_EncodeLocale(const wchar_t *text, size_t *error_pos)¶ Кодирует широкую символьную строку в кодировку локали с помощью обработчика ошибок surrogateescape: суррогатные символы в диапазоне U+DC80..U+DCFF преобразуются в байты 0x80..0xFF.
Кодировка (от высшего приоритета к низшему):
UTF-8на macOS, Android и VxWorks;UTF-8на Windows, еслиPy_LegacyWindowsFSEncodingFlagравен нулю;UTF-8если включён режим UTF-8 Python;ASCIIесли локальLC_CTYPEравна"C",nl_langinfo(CODESET)возвращает кодировкуASCII(или псевдоним), а функцииmbstowcs()иwcstombs()используют кодировкуISO-8859-1.текущая кодировка локали.
Функция использует кодировку UTF-8 в режиме UTF-8 Python.
Возвращает указатель на вновь выделенную байтовую строку, используется
PyMem_Free()\nдля освобождения памяти. ВозвращаетNULLпри ошибке кодирования или ошибке выделения\nпамяти.Если error_pos не равен
NULL, то*error_posустанавливается в(size_t)-1в случае успеха или в индекс недопустимого символа при ошибке кодирования.Используйте функцию
Py_DecodeLocale()для обратного декодирования байтовой строки в строку широких символов.См. также
Функции
PyUnicode_EncodeFSDefault()иPyUnicode_EncodeLocale().Новое в версии 3.5.
Изменено в версии 3.7: Функция теперь использует кодировку UTF-8 в режиме UTF-8.
Изменено в версии 3.8: Теперь функция использует кодировку UTF-8 в Windows, если
Py_LegacyWindowsFSEncodingFlagравен нулю;
Системные функции¶System Functions
Это служебные функции, предоставляющие функциональность модуля sys
коду на C. Все они работают со словарём модуля sys текущего потока интерпретатора,
который хранится во внутренней структуре состояния потока.
-
PyObject *
PySys_GetObject(const char *name)¶ - Возвращаемое значение: заимствованная ссылка.
Возвращает объект name из модуля
sysилиNULL, если он не существует, без установки исключения.
-
int
PySys_SetObject(const char *name, PyObject *v)¶ Устанавливает name в модуле
sysравным v, если v не равноNULL; в противном случае name удаляется из модуля sys. Возвращает0в случае успеха,-1при ошибке.
-
void
PySys_ResetWarnOptions()¶ Сбрасывает
sys.warnoptionsв пустой список. Эта функция может быть вызвана доPy_Initialize().
-
void
PySys_AddWarnOption(const wchar_t *s)¶ Добавляет s к
sys.warnoptions. Эта функция должна вызываться доPy_Initialize(), чтобы повлиять на список фильтра предупреждений.
-
void
PySys_AddWarnOptionUnicode(PyObject *unicode)¶ Добавляет unicode к
sys.warnoptions.Примечание: эта функция пока не может использоваться за пределами реализации CPython, поскольку для её работы её нужно вызывать до неявного импорта
warningsвPy_Initialize(), но она не может быть вызвана, пока среда выполнения не будет достаточно инициализирована для создания объектов Unicode.
-
void
PySys_SetPath(const wchar_t *path)¶ Устанавливает
sys.pathв объект списка путей, найденных в path, который должен быть списком путей, разделённых разделителем пути поиска платформы (:в Unix,;в Windows).
-
void
PySys_WriteStdout(const char *format, ...)¶ Записывает выходную строку, описываемую format, в
sys.stdout. Исключения не вызываются, даже если произошло усечение (см. ниже).format должен ограничивать общий размер форматированной выходной строки до 1000 байт или менее – после 1000 байт строка усекается. В частности, это означает, что не должно быть неограниченных форматов «%s»; их следует ограничивать с помощью «%.<N>s», где <N> – десятичное число, рассчитанное так, чтобы <N> плюс максимальный размер другого форматированного текста не превышал 1000 байт. Также следует остерегаться «%f», который может печатать сотни цифр для очень больших чисел.
Если возникает проблема или
sys.stdoutне задан, форматированное сообщение записывается в настоящий (на уровне C) stdout.
-
void
PySys_WriteStderr(const char *format, ...)¶ Аналогично
PySys_WriteStdout(), но выводит вsys.stderrили stderr вместо этого.
-
void
PySys_FormatStdout(const char *format, ...)¶ Функция подобна PySys_WriteStdout(), но форматирует сообщение с помощью
PyUnicode_FromFormatV()и не обрезает сообщение до произвольной длины.Новое в версии 3.2.
-
void
PySys_FormatStderr(const char *format, ...)¶ Аналогично
PySys_FormatStdout(), но выводит вsys.stderrили stderr вместо этого.Новое в версии 3.2.
-
void
PySys_AddXOption(const wchar_t *s)¶ Разбирает s как набор опций
-Xи добавляет их в текущее отображение опций, возвращаемоеPySys_GetXOptions(). Эту функцию можно вызывать доPy_Initialize().Новое в версии 3.2.
-
PyObject *
PySys_GetXOptions()¶ - Возвращаемое значение: заимствованная ссылка.
Возвращает текущий словарь опций
-X, аналогичноsys._xoptions. При ошибке возвращаетсяNULLи устанавливается исключение.Новое в версии 3.2.
-
int
PySys_Audit(const char *event, const char *format, ...)¶ Вызывает событие аудита с любыми активными перехватчиками. Возвращает ноль при успехе и ненулевое значение с установленным исключением при ошибке.
Если были добавлены какие-либо хуки, format и остальные аргументы будут использованы для создания кортежа для передачи. Кроме
N, доступны те же символы формата, что и вPy_BuildValue(). Если построенное значение не является кортежем, оно будет добавлено в кортеж из одного элемента. (Опция форматаNпотребляет ссылку, но поскольку невозможно узнать, будут ли аргументы этой функции потреблены, её использование может привести к утечкам ссылок.)Обратите внимание, что символы форматирования
#всегда должны рассматриваться какPy_ssize_t, независимо от того, был ли определёнPY_SSIZE_T_CLEAN.sys.audit()выполняет ту же функцию из кода Python.Новое в версии 3.8.
Изменено в версии 3.8.2: Требуется
Py_ssize_tдля символов форматирования#. Ранее выдавалось неизбежное предупреждение об устаревании.
-
int
PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)¶ Добавляет вызываемый объект hook в список активных хуков аудита.\nВозвращает ноль при успехе\nи ненулевое значение при ошибке. Если среда выполнения уже инициализирована, также устанавливает\nошибку при неудаче. Хуки, добавленные через этот API, вызываются для всех\nинтерпретаторов, созданных средой выполнения.
Указатель userData передаётся в функцию-обработчик. Поскольку функции-обработчики могут вызываться из разных сред выполнения, этот указатель не должен напрямую ссылаться на состояние Python.
Эту функцию можно безопасно вызывать до
Py_Initialize(). При вызове после инициализации среды выполнения существующие перехватчики аудита уведомляются и могут молча прервать операцию, вызвав ошибку, являющуюся подклассомException(другие ошибки не будут скрыты).Функция-обработчик имеет тип
int (*)(const char *event, PyObject *args, void *userData), где args гарантированно являетсяPyTupleObject. Функция-обработчик всегда вызывается при удержании GIL интерпретатором Python, вызвавшим событие.См. PEP 578 для подробного описания аудита. Функции в среде выполнения и стандартной библиотеке, которые вызывают события, перечислены в таблице событий аудита. Подробности приведены в документации каждой функции.
Если интерпретатор инициализирован, эта функция вызывает событие аудита
sys.addaudithookбез аргументов. Если какой-либо из существующих обработчиков возбуждает исключение, производное отException, новый обработчик не будет добавлен, и исключение сбрасывается. В результате вызывающий код не может предполагать, что его обработчик был добавлен, если только он не контролирует все существующие обработчики.Новое в версии 3.8.
Управление процессами¶Process Control
-
void
Py_FatalError(const char *message)¶ Выводит фатальное сообщение об ошибке и завершает процесс. Очистка не выполняется. Эту функцию следует вызывать только при обнаружении условия, которое делает опасным продолжение использования интерпретатора Python; например, когда управление объектами повреждено. В Unix вызывается стандартная функция библиотеки C
abort(), которая пытается создать файлcore.
-
void
Py_Exit(int status)¶ Завершает текущий процесс. Вызывает
Py_FinalizeEx(), а затем вызывает стандартную функцию библиотеки Cexit(status). ЕслиPy_FinalizeEx()указывает на ошибку, код завершения устанавливается в 120.Изменено в версии 3.6: Ошибки при финализации больше не игнорируются.
-
int
Py_AtExit(void (*func)())¶ Регистрирует функцию очистки, которая будет вызвана с помощью
Py_FinalizeEx(). Функция очистки будет вызвана без аргументов и не должна возвращать значение. Можно зарегистрировать не более 32 функций очистки. При успешной регистрацииPy_AtExit()возвращает0; при неудаче –-1. Последняя зарегистрированная функция очистки вызывается первой. Каждая функция очистки будет вызвана не более одного раза. Поскольку внутренняя финализация Python завершится до вызова функции очистки, func не должна вызывать никакие API Python.