Файловые объекты

Эти API являются минимальной эмуляцией API Python 2 C для встроенных файловых объектов, которые полагались на поддержку буферизованного ввода-вывода (FILE*) из стандартной библиотеки C. В Python 3 файлы и потоки используют новый модуль io, который определяет несколько уровней над низкоуровневым небуферизованным вводом-выводом операционной системы. Функции, описанные ниже, представляют собой удобные обертки C для этих новых API, и предназначены в основном для внутренних сообщений об ошибках в интерпретаторе; стороннему коду рекомендуется вместо этого обращаться к API io.

PyObject *PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
Return value: New reference. Part of the Stable ABI.

Создает объект файла Python из дескриптора файла уже открытого файла fd. Аргументы name, encoding, errors и newline могут быть NULL для использования значений по умолчанию; buffering может быть -1 для использования значений по умолчанию. name игнорируется и сохраняется для обратной совместимости. При неудаче возвращается NULL. Для более полного описания аргументов обратитесь к документации функции io.open().

Предупреждение

Поскольку потоки Python имеют свой собственный буферный слой, смешивание их с файловыми дескрипторами уровня ОС может вызвать различные проблемы (например, неожиданное упорядочивание данных).

Изменено в версии 3.2: Игнорируйте атрибут name.

int PyObject_AsFileDescriptor(PyObject *p)
Part of the Stable ABI.

Возвращает дескриптор файла, связанный с p, в виде объекта int. Если объект является целым числом, то возвращается его значение. Если нет, вызывается метод fileno() объекта, если он существует; метод должен возвращать целое число, которое возвращается как значение дескриптора файла. Устанавливает исключение и возвращает -1 при неудаче.

PyObject *PyFile_GetLine(PyObject *p, int n)
Return value: New reference. Part of the Stable ABI.

Эквивалентная p.readline([n]), эта функция считывает одну строку из объекта p. p может быть объектом файла или любым объектом с методом readline(). Если n равно 0, то считывается ровно одна строка, независимо от длины строки. Если n больше, чем 0, из файла будет прочитано не более n байт; может быть возвращена неполная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут немедленно. Если n меньше, чем 0, то считывается одна строка, независимо от длины, но при немедленном достижении конца файла возвращается EOFError.

int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)

Переопределяет обычное поведение io.open_code() для передачи своего параметра через предоставленный обработчик.

Обработчик является функцией типа PyObject *(*)(PyObject *path, void *userData), где path гарантированно является PyUnicodeObject.

Указатель userData передается в функцию хука. Поскольку хук-функции могут вызываться из разных режимов выполнения, этот указатель не должен напрямую ссылаться на состояние Python.

Поскольку этот хук намеренно используется во время импорта, избегайте импорта новых модулей во время его выполнения, если только не известно, что они заморожены или доступны в sys.modules.

После установки хука его нельзя удалить или заменить, и последующие вызовы PyFile_SetOpenCodeHook() будут неудачными. В случае неудачи функция возвращает -1 и устанавливает исключение, если интерпретатор был инициализирован.

Эту функцию безопасно вызывать перед Py_Initialize().

Вызывает auditing event setopencodehook без аргументов.

Добавлено в версии 3.8.

int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)
Part of the Stable ABI.

Запись объекта obj в файловый объект p. Единственным поддерживаемым флагом для flags является Py_PRINT_RAW; если он задан, то вместо str() записывается repr() объекта. Возвращается 0 при успехе или -1 при неудаче; будет установлено соответствующее исключение.

int PyFile_WriteString(const char *s, PyObject *p)
Part of the Stable ABI.

Записать строку s в файловый объект p. Возврат 0 при успехе или -1 при неудаче; будет установлено соответствующее исключение.

Вернуться на верх