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

---

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

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

Возвращает истину (ненулевое значение), если файл стандартного ввода-вывода *fp* с именем *filename* считается интерактивным. Это справедливо для файлов, для которых `isatty(fileno(fp))` возвращает истину. Если глобальный флаг `Py_InteractiveFlag` истинен, эта функция также возвращает истину, если указатель *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/3.4/library/sys.html#module-sys) доступной из кода на C. Все они работают со словарём модуля [`sys`](https://python-all.ru/3.4/library/sys.html#module-sys) текущего потока интерпретатора, который хранится во внутренней структуре состояния потока.

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

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

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

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

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

#### `void PySys_ResetWarnOptions()`

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

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

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

#### `void PySys_AddWarnOptionUnicode(PyObject *unicode)`

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

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

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

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

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

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

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

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

Как [`PySys_WriteStdout()`](https://python-all.ru/3.4/c-api/sys.html#c.PySys_WriteStdout), но запись производится в [`sys.stderr`](https://python-all.ru/3.4/library/sys.html#sys.stderr) или *stderr*.

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

Функция, аналогичная PySys\_WriteStdout(), но форматирующая сообщение с помощью [`PyUnicode_FromFormatV()`](https://python-all.ru/3.4/c-api/unicode.html#c.PyUnicode_FromFormatV) и не усекающая сообщение до произвольной длины.

Новое в версии 3.2.

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

Как [`PySys_FormatStdout()`](https://python-all.ru/3.4/c-api/sys.html#c.PySys_FormatStdout), но запись производится в [`sys.stderr`](https://python-all.ru/3.4/library/sys.html#sys.stderr) или *stderr*.

Новое в версии 3.2.

#### `void PySys_AddXOption(const wchar_t *s)`

Разбирает *s* как набор опций [*-X*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-X) и добавляет их в текущее отображение опций, возвращаемое функцией [`PySys_GetXOptions()`](https://python-all.ru/3.4/c-api/sys.html#c.PySys_GetXOptions).

Новое в версии 3.2.

#### `PyObject *PySys_GetXOptions()`

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

Возвращает текущий словарь опций [*-X*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-X), аналогично [`sys._xoptions`](https://python-all.ru/3.4/library/sys.html#sys._xoptions). При ошибке возвращается *NULL* и устанавливается исключение.

Новое в версии 3.2.

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

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

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

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

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

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

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