> **Источник:** https://python-all.ru/3.0/c-api/sys.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Утилиты операционной системы

**\[Py\_FdIsInteractive\]int `Py_FdIsInteractive`(FILE *\*fp*, const char *\*filename*)**

Возвращает истину (ненулевое значение), если файл стандартного ввода-вывода

*fp*

с именем

*filename*

считается интерактивным. Это справедливо для файлов, для которых

`isatty(fileno(fp))`

возвращает истину. Если глобальный флаг

`Py_InteractiveFlag`

истинен, эта функция также возвращает истину, если указатель

*filename*

равен

*NULL*

или имя совпадает с одной из строк

`'<stdin>'`

или

`'???'`

.

**\[PyOS\_GetLastModificationTime\]long `PyOS_GetLastModificationTime`(char *\*filename*)**

Возвращает время последнего изменения файла

*filename*

. Результат кодируется так же, как отметка времени, возвращаемая стандартной библиотечной функцией языка C

`time`

.

**\[PyOS\_AfterFork\]void `PyOS_AfterFork`()**

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

**\[PyOS\_CheckStack\]int `PyOS_CheckStack`()**

Возвращает истину, когда в интерпретаторе заканчивается стековое пространство. Это надёжная проверка, но доступна только если определён

`USE_STACKCHECK`

(в настоящее время на Windows с компилятором Microsoft Visual C++).

`USE_STACKCHECK`

определяется автоматически; не следует изменять это определение в собственном коде.

**\[PyOS\_getsig\]PyOS\_sighandler\_t `PyOS_getsig`(int *i*)**

Возвращает текущий обработчик сигнала

*i*

. Эта функция является тонкой обёрткой над

`sigaction`

или

`signal`

. Не вызывайте эти функции напрямую!

`PyOS_sighandler_t`

– это псевдоним typedef для

`void (*)(int)`

.

**\[PyOS\_setsig\]PyOS\_sighandler\_t `PyOS_setsig`(int *i*, PyOS\_sighandler\_t *h*)**

Устанавливает обработчик сигнала

*i*

равным

*h*

; возвращает старый обработчик сигнала. Это тонкая обёртка над

`sigaction`

или

`signal`

. Не вызывайте эти функции напрямую!

`PyOS_sighandler_t`

– это псевдоним typedef для

`void (*)(int)`

.

# Системные функции

Это служебные функции, которые делают функциональность модуля [`sys`](https://python-all.ru/3.0/library/sys.html#module-sys) доступной из кода на C. Все они работают со словарём модуля [`sys`](https://python-all.ru/3.0/library/sys.html#module-sys) текущего потока интерпретатора, который хранится во внутренней структуре состояния потока.

**\[PySys\_GetObject\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) \*`PySys_GetObject`(char *\*name*)**

*Возвращаемое значение: заимствованная ссылка.*

Возвращает объект *name* из модуля [`sys`](https://python-all.ru/3.0/library/sys.html#module-sys) или *NULL*, если он не существует, без установки исключения.

**\[PySys\_GetFile\]FILE \*`PySys_GetFile`(char *\*name*, FILE *\*def*)**

Возвращает

`FILE*`

, связанный с объектом

*name*

в модуле

[`sys`](https://python-all.ru/3.0/library/sys.html#module-sys)

, или

*def*

, если

*name*

отсутствует в модуле или не связан с

`FILE*`

.

**\[PySys\_SetObject\]int `PySys_SetObject`(char *\*name*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*v*)**

Устанавливает

*name*

в модуле

[`sys`](https://python-all.ru/3.0/library/sys.html#module-sys)

равным

*v*

, если только

*v*

не равен

*NULL*

; в этом случае

*name*

удаляется из модуля sys. Возвращает

`0`

при успехе,

`-1`

при ошибке.

**\[PySys\_ResetWarnOptions\]void `PySys_ResetWarnOptions`(void)**

Сбрасывает

[`sys.warnoptions`](https://python-all.ru/3.0/library/sys.html#sys.warnoptions)

в пустой список.

**\[PySys\_AddWarnOption\]void `PySys_AddWarnOption`(wchar\_t *\*s*)**

Добавляет

*s*

в

[`sys.warnoptions`](https://python-all.ru/3.0/library/sys.html#sys.warnoptions)

.

**\[PySys\_SetPath\]void `PySys_SetPath`(wchar\_t *\*path*)**

Устанавливает

[`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path)

в объект-список путей, найденных в

*path*

, который должен представлять собой список путей, разделённых разделителем путей поиска платформы (

`:`

в Unix,

`;`

в Windows).

**\[PySys\_WriteStdout\]void `PySys_WriteStdout`(const char *\*format*, ...)**

Записывает выходную строку, описываемую *format*, в [`sys.stdout`](https://python-all.ru/3.0/library/sys.html#sys.stdout). Исключения не возникают, даже если происходит усечение (см. ниже).

*format* должен ограничивать общий размер форматированной выходной строки до 1000 байт или менее – после 1000 байт строка усекается. В частности, это означает, что не должно быть неограниченных форматов «%s»; их следует ограничивать с помощью «%.\<N\>s», где \<N\> – десятичное число, рассчитанное так, чтобы \<N\> плюс максимальный размер другого форматированного текста не превышал 1000 байт. Также следует остерегаться «%f», который может печатать сотни цифр для очень больших чисел.

Если возникает проблема или [`sys.stdout`](https://python-all.ru/3.0/library/sys.html#sys.stdout) не задан, форматированное сообщение записывается в настоящий (на уровне C) *stdout*.

**\[PySys\_WriteStderr\]void `PySys_WriteStderr`(const char *\*format*, ...)**

Как и выше, но запись производится в

[`sys.stderr`](https://python-all.ru/3.0/library/sys.html#sys.stderr)

или

*stderr*

.

# Управление процессами

**\[Py\_FatalError\]void `Py_FatalError`(const char *\*message*)**

Выводит сообщение о фатальной ошибке и завершает процесс. Очистка не выполняется. Эту функцию следует вызывать только при обнаружении условия, при котором использование интерпретатора Python становится опасным; например, когда администрирование объектов выглядит повреждённым. В Unix вызывается стандартная библиотечная функция C `abort`, которая попытается создать файл `core`.

**\[Py\_Exit\]void `Py_Exit`(int *status*)**

Завершает текущий процесс. Эта функция вызывает [`Py_Finalize`](https://python-all.ru/3.0/c-api/init.html#Py_Finalize), а затем стандартную библиотечную функцию C `exit(status)`.

**\[Py\_AtExit\]int `Py_AtExit`(void (\*func) *()*)**

Регистрирует функцию очистки, которая будет вызвана функцией [`Py_Finalize`](https://python-all.ru/3.0/c-api/init.html#Py_Finalize). Функция очистки будет вызвана без аргументов и не должна возвращать значение. Можно зарегистрировать не более 32 функций очистки. При успешной регистрации [`Py_AtExit`](https://python-all.ru/3.0/c-api/sys.html#Py_AtExit) возвращает `0`; при неудаче возвращает `-1`. Функция очистки, зарегистрированная последней, вызывается первой. Каждая функция очистки будет вызвана не более одного раза. Поскольку внутренняя финализация Python будет завершена до вызова функции очистки, функция *func* не должна вызывать никакие API Python.
