Утилиты операционной системы¶
-
PyObject *
PyOS_FSPath
(PyObject *path)¶ - Return value: New reference. Part of the Stable ABI since version 3.6.
Возвращает представление файловой системы для path. Если объект является объектом
str
илиbytes
, то количество ссылок на него увеличивается. Если объект реализует интерфейсos.PathLike
, то возвращается__fspath__()
, если это объектstr
илиbytes
. В противном случае вызываетсяTypeError
и возвращаетсяNULL
.Добавлено в версии 3.6.
-
int
Py_FdIsInteractive
(FILE *fp, const char *filename)¶ Возвращает true (ненулевое значение), если файл стандартного ввода/вывода fp с именем filename считается интерактивным. Это относится к файлам, для которых
isatty(fileno(fp))
является истиной. Если глобальный флагPy_InteractiveFlag
равен true, эта функция также возвращает true, если указатель filename равенNULL
или если имя равно одной из строк'<stdin>'
или'???'
.
-
void
PyOS_BeforeFork
()¶ - Part of the Stable ABI on platforms with fork() since version 3.7.
Функция для подготовки некоторого внутреннего состояния перед форком процесса. Ее следует вызывать перед вызовом
fork()
или любой другой подобной функции, клонирующей текущий процесс. Доступна только в системах, где определеноfork()
.Предупреждение
Вызов C
fork()
должен осуществляться только из «main» thread (из «main» interpreter). То же самое справедливо и дляPyOS_BeforeFork()
.Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Parent
()¶ - Part of the Stable ABI on platforms with fork() since version 3.7.
Функция для обновления некоторого внутреннего состояния после форка процесса. Она должна быть вызвана из родительского процесса после вызова
fork()
или любой подобной функции, которая клонирует текущий процесс, независимо от того, было ли клонирование процесса успешным. Доступно только в системах, где определеноfork()
.Предупреждение
Вызов C
fork()
должен осуществляться только из «main» thread (из «main» interpreter). То же самое справедливо и дляPyOS_AfterFork_Parent()
.Добавлено в версии 3.7.
-
void
PyOS_AfterFork_Child
()¶ - Part of the Stable ABI on platforms with fork() since version 3.7.
Функция для обновления внутреннего состояния интерпретатора после форка процесса. Она должна быть вызвана из дочернего процесса после вызова
fork()
или любой другой подобной функции, клонирующей текущий процесс, если есть вероятность, что процесс вернется в интерпретатор Python. Доступно только в системах, где определеноfork()
.Предупреждение
Вызов C
fork()
должен осуществляться только из «main» thread (из «main» interpreter). То же самое справедливо и дляPyOS_AfterFork_Child()
.Добавлено в версии 3.7.
См.также
os.register_at_fork()
позволяет регистрировать пользовательские функции Python для вызоваPyOS_BeforeFork()
,PyOS_AfterFork_Parent()
иPyOS_AfterFork_Child()
.
-
void
PyOS_AfterFork
()¶ - Part of the Stable ABI on platforms with fork().
Функция для обновления некоторого внутреннего состояния после форка процесса; она должна вызываться в новом процессе, если интерпретатор Python будет продолжать использоваться. Если в новый процесс загружается новый исполняемый файл, эту функцию вызывать не нужно.
Не рекомендуется, начиная с версии 3.7: Эта функция заменена функцией
PyOS_AfterFork_Child()
.
-
int
PyOS_CheckStack
()¶ - Part of the Stable ABI on platforms with USE_STACKCHECK since version 3.7.
Возвращает true, если в интерпретаторе закончилось место в стеке. Это надежная проверка, но она доступна только тогда, когда определено
USE_STACKCHECK
(в настоящее время на Windows с использованием компилятора Microsoft Visual C++).USE_STACKCHECK
будет определено автоматически; вы никогда не должны изменять это определение в своем собственном коде.
-
PyOS_sighandler_t
PyOS_getsig
(int i)¶ - Part of the Stable ABI.
Возвращает текущий обработчик сигнала для сигнала i. Это тонкая обертка вокруг
sigaction()
илиsignal()
. Не вызывайте эти функции напрямую!PyOS_sighandler_t
является типизированным псевдонимом для void (*)(int).
-
PyOS_sighandler_t
PyOS_setsig
(int i, PyOS_sighandler_t h)¶ - Part of the Stable ABI.
Установите обработчик сигнала i на h; верните старый обработчик сигнала. Это тонкая обертка вокруг
sigaction()
илиsignal()
. Не вызывайте эти функции напрямую!PyOS_sighandler_t
является типизированным псевдонимом для void (*)(int).
-
wchar_t *
Py_DecodeLocale
(const char *arg, size_t *size)¶ - Part of the Stable ABI since version 3.7.
Предупреждение
Эту функцию не следует вызывать напрямую: используйте API
PyConfig
с функциейPyConfig_SetBytesString()
, которая гарантирует, что Python is preinitialized.Эта функция не должна вызываться раньше Python is preinitialized и для того, чтобы локаль LC_CTYPE была правильно настроена: см. функцию
Py_PreInitialize()
.Декодируйте байтовую строку из filesystem encoding and error handler. Если обработчик ошибок surrogateescape error handler, то недекодируемые байты декодируются как символы в диапазоне U+DC80…U+DCFF; а если последовательность байтов может быть декодирована как суррогатный символ, то вместо декодирования байты экранируются с помощью обработчика ошибок surrogateescape.
Верните указатель на только что выделенную широкую символьную строку, используйте
PyMem_RawFree()
для освобождения памяти. Если размер не равенNULL
, запишите количество широких символов, исключая нулевой символ, в*size
.Возвращает
NULL
при ошибке декодирования или ошибке выделения памяти. Если size неNULL
, то*size
устанавливается в(size_t)-1
при ошибке памяти или устанавливается в(size_t)-2
при ошибке декодирования.filesystem encoding and error handler выбираются
PyConfig_Read()
: см.filesystem_encoding
иfilesystem_errors
членыPyConfig
.Ошибки декодирования никогда не должны возникать, если только нет ошибки в библиотеке C.
Используйте функцию
Py_EncodeLocale()
для кодирования строки символов обратно в строку байтов.См.также
Функции
PyUnicode_DecodeFSDefaultAndSize()
иPyUnicode_DecodeLocaleAndSize()
.Добавлено в версии 3.5.
Изменено в версии 3.7: Теперь функция использует кодировку UTF-8 в Python UTF-8 Mode.
Изменено в версии 3.8: Функция теперь использует кодировку UTF-8 в Windows, если
Py_LegacyWindowsFSEncodingFlag
равен нулю;
-
char *
Py_EncodeLocale
(const wchar_t *text, size_t *error_pos)¶ - Part of the Stable ABI since version 3.7.
Закодировать широкую символьную строку в байт filesystem encoding and error handler. Если обработчиком ошибки является surrogateescape error handler, суррогатные символы в диапазоне U+DC80…U+DCFF преобразуются в байты 0x80…0xFF.
Возвращает указатель на только что выделенную байтовую строку, используйте
PyMem_Free()
для освобождения памяти. ВозвращаетNULL
при ошибке кодирования или ошибке выделения памяти.Если error_pos не является
NULL
,*error_pos
устанавливается в(size_t)-1
при успехе, или устанавливается в индекс недопустимого символа при ошибке кодирования.filesystem encoding and error handler выбираются
PyConfig_Read()
: см.filesystem_encoding
иfilesystem_errors
членыPyConfig
.Используйте функцию
Py_DecodeLocale()
для декодирования байтовой строки обратно в широкую символьную строку.Предупреждение
Эта функция не должна вызываться раньше Python is preinitialized и для того, чтобы локаль LC_CTYPE была правильно настроена: см. функцию
Py_PreInitialize()
.См.также
Функции
PyUnicode_EncodeFSDefault()
иPyUnicode_EncodeLocale()
.Добавлено в версии 3.5.
Изменено в версии 3.7: Теперь функция использует кодировку UTF-8 в Python UTF-8 Mode.
Изменено в версии 3.8: Функция теперь использует кодировку UTF-8 в Windows, если
Py_LegacyWindowsFSEncodingFlag
равен нулю.
Функции системы¶
Это служебные функции, которые делают функциональность из модуля sys
доступной для кода на языке Си. Все они работают с dict модуля sys
текущего потока интерпретатора, который содержится во внутренней структуре состояния потока.
-
PyObject *
PySys_GetObject
(const char *name)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Возвращает объект name из модуля
sys
илиNULL
, если он не существует, не устанавливая исключения.
-
int
PySys_SetObject
(const char *name, PyObject *v)¶ - Part of the Stable ABI.
Устанавливает name в модуле
sys
на v, если только v неNULL
, в этом случае name удаляется из модуля sys. Возвращает0
при успехе,-1
при ошибке.
-
void
PySys_ResetWarnOptions
()¶ - Part of the Stable ABI.
Сбросить
sys.warnoptions
в пустой список. Эта функция может быть вызвана доPy_Initialize()
.
-
void
PySys_AddWarnOption
(const wchar_t *s)¶ - Part of the Stable ABI.
Добавить s к
sys.warnoptions
. Эта функция должна быть вызвана доPy_Initialize()
, чтобы повлиять на список фильтров предупреждений.
-
void
PySys_AddWarnOptionUnicode
(PyObject *unicode)¶ - Part of the Stable ABI.
Добавьте unicode к
sys.warnoptions
.Примечание: в настоящее время эта функция не может быть использована извне реализации CPython, поскольку она должна быть вызвана до неявного импорта
warnings
вPy_Initialize()
, чтобы быть эффективной, но не может быть вызвана до тех пор, пока не будет инициализирована достаточная часть среды выполнения, позволяющая создавать объекты Unicode.
-
void
PySys_SetPath
(const wchar_t *path)¶ - Part of the Stable ABI.
Установите
sys.path
в объект списка путей, найденных в path, который должен представлять собой список путей, разделенных разделителем путей поиска платформы (:
на Unix,;
на Windows).
-
void
PySys_WriteStdout
(const char *format, ...)¶ - Part of the Stable ABI.
Записать строку вывода, описанную форматом, в
sys.stdout
. Никаких исключений не возникает, даже если происходит усечение (см. ниже).формат должен ограничивать общий размер форматированной выходной строки до 1000 байт или меньше - после 1000 байт выходная строка усекается. В частности, это означает, что не должно быть неограниченных форматов «%s»; они должны быть ограничены с помощью «%.<N>s», где <N> - десятичное число, рассчитанное так, чтобы <N> плюс максимальный размер другого форматированного текста не превышал 1000 байт. Также следите за «%f», который может выводить сотни цифр для очень больших чисел.
Если возникает проблема или
sys.stdout
не установлен, отформатированное сообщение записывается в реальный (уровень C) stdout.
-
void
PySys_WriteStderr
(const char *format, ...)¶ - Part of the Stable ABI.
Как
PySys_WriteStdout()
, но вместо него пишитеsys.stderr
или stderr.
-
void
PySys_FormatStdout
(const char *format, ...)¶ - Part of the Stable ABI.
Функция, аналогичная PySys_WriteStdout(), но форматирует сообщение с помощью
PyUnicode_FromFormatV()
и не усекает его до произвольной длины.Добавлено в версии 3.2.
-
void
PySys_FormatStderr
(const char *format, ...)¶ - Part of the Stable ABI.
Как
PySys_FormatStdout()
, но вместо него пишитеsys.stderr
или stderr.Добавлено в версии 3.2.
-
void
PySys_AddXOption
(const wchar_t *s)¶ - Part of the Stable ABI since version 3.7.
Разбирает s как набор опций
-X
и добавляет их к текущему отображению опций, возвращаемомуPySys_GetXOptions()
. Эта функция может быть вызвана доPy_Initialize()
.Добавлено в версии 3.2.
-
PyObject *
PySys_GetXOptions
()¶ - Return value: Borrowed reference. Part of the Stable ABI since version 3.7.
Возвращает текущий словарь опций
-X
, аналогичноsys._xoptions
. При ошибке возвращаетсяNULL
и устанавливается исключение.Добавлено в версии 3.2.
-
int
PySys_Audit
(const char *event, const char *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
(другие ошибки не будут заглушены).Функция hook имеет тип int (*)(const char *event, PyObject *args, void *userData), где args гарантированно является
PyTupleObject
. Функция hook всегда вызывается с GIL, хранящимся в интерпретаторе Python, который вызвал событие.Подробное описание аудита см. в PEP 578. Функции в среде выполнения и стандартной библиотеке, которые вызывают события, перечислены в audit events table. Подробности приведены в документации к каждой функции.
Вызывает auditing event
sys.addaudithook
без аргументов.Добавлено в версии 3.8.
Управление процессами¶
-
void
Py_FatalError
(const char *message)¶ - Part of the Stable ABI.
Выведите сообщение о фатальной ошибке и завершите процесс. Очистка не выполняется. Эту функцию следует вызывать только при обнаружении состояния, при котором продолжать работу с интерпретатором Python опасно; например, когда администрирование объектов оказывается поврежденным. На Unix вызывается стандартная функция библиотеки C
abort()
, которая попытается создать файлcore
.Функция
Py_FatalError()
заменяется макросом, который автоматически регистрирует имя текущей функции, если не определен макросPy_LIMITED_API
.Изменено в версии 3.9: Автоматически регистрируйте имя функции.
-
void
Py_Exit
(int status)¶ - Part of the Stable ABI.
Выход из текущего процесса. При этом вызывается
Py_FinalizeEx()
, а затем вызывается стандартная функция библиотеки Cexit(status)
. ЕслиPy_FinalizeEx()
указывает на ошибку, статус выхода устанавливается на 120.Изменено в версии 3.6: Ошибки при финализации больше не игнорируются.
-
int
Py_AtExit
(void (*func)())¶ - Part of the Stable ABI.
Зарегистрируйте функцию очистки, которая будет вызываться
Py_FinalizeEx()
. Функция очистки будет вызываться без аргументов и не должна возвращать никакого значения. Можно зарегистрировать не более 32 функций очистки. При успешной регистрацииPy_AtExit()
возвращает0
; при неудаче возвращает-1
. Функция очистки, зарегистрированная последней, вызывается первой. Каждая функция очистки будет вызвана не более одного раза. Поскольку внутренняя финализация Python будет завершена до функции очистки, никакие API Python не должны вызываться func.