Утилиты операционной системы¶
-
PyObject*
PyOS_FSPath
(PyObject *path)¶ - Return value: New reference.
Возвращает представление файловой системы для path. Если объект является объектом
str
илиbytes
, то количество его ссылок увеличивается. Если объект реализует интерфейсos.PathLike
, тогда возвращается__fspath__()
, если он является объектомstr
илиbytes
. В противном случаеTypeError
поднимается и возвращаетсяNULL
.Добавлено в версии 3.6.
-
int
Py_FdIsInteractive
(FILE *fp, const char *filename)¶ Возвращает true (ненулевое значение), если стандартное I/O файла fp с именем filename считается интерактивным. Это относится к файлам, для которых
isatty(fileno(fp))
соответствует true. Если глобальный флаг,Py_InteractiveFlag
true, эта функция также возвращает true, если указатель filename -NULL
или если имя равно одной из строк'<stdin>'
или'???'
.
-
void
PyOS_BeforeFork
()¶ Функция для подготовки внутреннего состояния перед fork процесса. Это должно быть вызвано перед вызовом
fork()
или любой аналогичной функцией, которая клонирует текущий процесс. Доступно только в системах, в которых определеноfork()
.Предупреждение
Вызов C
fork()
должен выполняться только из «главного» потока («главный» интерпретатор). То же самое относится и кPyOS_BeforeFork()
.Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Parent
()¶ Функция для обновления некоторых внутренних состояний после fork процесса. Ее следует вызывать из родительского процесса после вызова
fork()
или любой аналогичной функции, которая клонирует текущий процесс, независимо от того, было ли клонирование процесса успешным. Доступно только в системах, в которых определеноfork()
.Предупреждение
Вызов C
fork()
должен выполняться только из «главного» потока («главный» интерпретатор). То же самое относится и кPyOS_AfterFork_Parent()
.Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Child
()¶ Функция для обновления внутреннего состояния интерпретатора после fork процесса. Ее следует вызвать из дочернего процесса после вызова
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
()¶ Функция обновления некоторого внутреннего состояния после fork процесса; это должно быть вызвано в новом процессе, если Python интерпретатор будет по- прежнему использоваться. Если в новый процесс загружен новый исполняемый файл, вызов этой функции не требуется.
Не рекомендуется, начиная с версии 3.7: Эта функция заменяется
PyOS_AfterFork_Child()
.
-
int
PyOS_CheckStack
()¶ Возвращает true, когда в интерпретатору не хватает места в стеке. Это надежная проверка, но доступна только при определении
USE_STACKCHECK
(в настоящее время в Windows используется компилятор Microsoft Visual C++).USE_STACKCHECK
будет определяться автоматически; никогда не следует изменять определение в собственном коде.
-
PyOS_sighandler_t
PyOS_getsig
(int i)¶ Возвращает обработчик текущего сигнала для i сигнала. Это тонкая обертка вокруг
sigaction()
илиsignal()
. Не вызывайте эти функции напрямую!PyOS_sighandler_t
является typedef алиасом for:c:type:void (*)(int).
-
PyOS_sighandler_t
PyOS_setsig
(int i, PyOS_sighandler_t h)¶ Установить обработчик сигнала для h i сигнала; возвращает старый сигнальный обработчик. Это тонкая обертка вокруг
sigaction()
илиsignal()
. Не вызывайте эти функции напрямую!PyOS_sighandler_t
является typedef алиасом for:c:type:void (*)(int).
-
wchar_t*
Py_DecodeLocale
(const char* arg, size_t *size)¶ Декодировать строку байт с кодировкой локали с обработчиком ошибок суррогатного эскейпа: недекодируемые байты декодируются как символы в диапазоне U+DC80.. U+DCFF. Если последовательность байтов может быть декодирована как суррогатный символ, избегайте байтов, используя обработчик ошибки суррогатного эскейпа, вместо их декодирования.
Кодирование, от наивысшего приоритета, до наименьшего приоритета:
UTF-8
на macOS, Android и VxWorks;UTF-8
на Windows, еслиPy_LegacyWindowsFSEncodingFlag
равно нулю;UTF-8
если включен режим Python UTF-8;ASCII
еслиLC_CTYPE
локаль"C"
,nl_langinfo(CODESET)
возвращаетASCII
кодировку (или алиас), а функцииmbstowcs()
иwcstombs()
используютISO-8859-1
кодировку.- Текущая кодировка локали.
Возвращает указатель на только что аллоцированную широкосимвольную строку, используйте
PyMem_RawFree()
, чтобы освободить память. Если размер не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)¶ Закодировать широкосимвольную строку кодировки локали с обработчиком ошибок суррогатного экранирования: суррогатные символы в диапазоне U+DC80..U+DCFF преобразуются в байты 0x80..0xFF.
Кодирование, от наивысшего приоритета, до наименьшего приоритета:
UTF-8
на macOS, Android и VxWorks;UTF-8
на Windows, еслиPy_LegacyWindowsFSEncodingFlag
равно нулю;UTF-8
если включен режим Python UTF-8;ASCII
еслиLC_CTYPE
локаль является"C"
,nl_langinfo(CODESET)
возвращаетASCII
кодировкой (или алиас), а функцииmbstowcs()
иwcstombs()
используютISO-8859-1
кодировку.- Текущая кодировка локали.
Функция использует UTF-8 кодировку в режиме Python UTF-8.
Возвращает указатель на вновь аллоцированную байтовую строку, используйте
PyMem_Free()
для освобождения памяти. ВозвращаетNULL
при ошибке кодировки или при ошибке выделения памятиЕсли 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
равно нулю;
Системные функции¶
Это служебные функции, которые реализуют функциональные возможности модуля
sys
доступными для C кода. Они все работают с текущим словарем
модуля sys
потока интерпретатора, который содержится во внутренней
структуре состояния потока.
-
PyObject *
PySys_GetObject
(const char *name)¶ - Return value: Borrowed reference.
Возвращает объект 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()
, чтобы быть эффективной, но не может быть вызвана до тех пор, пока не будет инициализировано достаточно времени выполнения для создания объектов Юникода.
-
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
()¶ - Return value: Borrowed reference.
Возвращает текущий словарь вариантов
-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 в список активных хуков аудита. Возвращает ноль при успехе и не нуль при сбое. Если среда выполнения была инициализирована, также установить ошибку при сбое. Хуки, добавленные через это API, вызываются для всех интерпретаторов, созданных средой выполнения.
Указатель userData передается в хук функцию. Поскольку функции хуки могут вызываться из различных сред выполнения, этот указатель не должен ссылаться непосредственно на Python состояние.
Эта функция безопасна для вызова перед
Py_Initialize()
. При вызове после инициализации во время выполнения существующие хуки аудита уведомляются и могут молча прервать операцию, вызывая ошибку, подклассифицированную изException
(другие ошибки не будут скрыты).Функция хук типа
int (*)(const char *event, PyObject *args, void *userData)
, где args гарантированно являетсяPyTupleObject
. Функция хук всегда вызывается с GIL, удерживаемым Python интерпретатором, который вызвал событие.Подробное описание аудита см. в разделе PEP 578. Функции среды выполнения и стандартной библиотеки, вызывающие события, перечислены в таблице событий аудита. Подробная информация содержится в документации каждой функции.
Если интерпретатор инициализирован, эта функция вызывает событие аудита,
sys.addaudithook
без аргументов. Если какие-либо существующие хуки вызывают исключение, производное отException
, новый хук не будет добавлен и исключение будет очищено. В результате вызывающие не могут предположить, что их хук был добавлен, если они не управляют всеми существующими хуками.Добавлено в версии 3.8.
Управление процессом¶
-
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’а будет завершена до выполнения функции очистки, Python не должен вызывать func API.