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

---

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

#### `int Py_FdIsInteractive(FILE *fp, const char *filename)`

Возвращает true (ненулевое значение), если стандартный файл ввода-вывода *fp* с именем *filename* считается интерактивным. Это верно для файлов, для которых `isatty(fileno(fp))` истинно. Если глобальный флаг `Py_InteractiveFlag` истинен, эта функция также возвращает true, если указатель *filename* равен *NULL* или если имя совпадает с одной из строк `'<stdin>'` или `'???'`.

#### `void PyOS_AfterFork()`

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

#### `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)`.

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

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

#### `PyObject *PySys_GetObject(char *name)`

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

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

#### `FILE *PySys_GetFile(char *name, FILE *def)`

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

#### `int PySys_SetObject(char *name, PyObject *v)`

Устанавливает *name* в модуле [`sys`](https://python-all.ru/2.7/library/sys.html#module-sys) в значение *v*, если только *v* не равно *NULL*; в этом случае *name* удаляется из модуля sys. Возвращает `0` при успехе, `-1` при ошибке.

#### `void PySys_ResetWarnOptions()`

Сбрасывает [`sys.warnoptions`](https://python-all.ru/2.7/library/sys.html#sys.warnoptions) в пустой список.

#### `void PySys_AddWarnOption(char *s)`

Добавляет *s* к [`sys.warnoptions`](https://python-all.ru/2.7/library/sys.html#sys.warnoptions).

#### `void PySys_SetPath(char *path)`

Устанавливает [`sys.path`](https://python-all.ru/2.7/library/sys.html#sys.path) в объект списка путей, найденных в *path*, который должен быть списком путей, разделённых разделителем пути поиска платформы (`:` в Unix, `;` в Windows).

#### `void PySys_WriteStdout(const char *format, ...)`

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

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

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

#### `void PySys_WriteStderr(const char *format, ...)`

Как и выше, но запись выполняется в [`sys.stderr`](https://python-all.ru/2.7/library/sys.html#sys.stderr) или *stderr*.

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

#### `void Py_FatalError(const char *message)`

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

#### `void Py_Exit(int status)`

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

#### `int Py_AtExit(void (*func)())`

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