Файлові об’єкти¶
These APIs are a minimal emulation of the Python 2 C API for built-in file
objects, which used to rely on the buffered I/O (FILE*
) support
from the C standard library. In Python 3, files and streams use the new
io
module, which defines several layers over the low-level unbuffered
I/O of the operating system. The functions described below are
convenience C wrappers over these new APIs, and meant mostly for internal
error reporting in the interpreter; third-party code is advised to access
the io
APIs instead.
-
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.
Створіть файловий об’єкт Python із файлового дескриптора вже відкритого файлу fd. Аргументи name, encoding, errors і newline можуть бути
NULL
для використання типових значень; buffering може бути -1, щоб використовувати значення за замовчуванням. name ігнорується та зберігається для зворотної сумісності. ПовертаєNULL
у разі помилки. Щоб отримати докладніший опис аргументів, зверніться до документації функціїio.open()
.Попередження
Оскільки потоки Python мають власний рівень буферизації, змішування їх із файловими дескрипторами рівня ОС може спричинити різноманітні проблеми (наприклад, несподіване впорядкування даних).
Змінено в версії 3.2: Ігнорувати атрибут name.
-
int
PyObject_AsFileDescriptor
(PyObject *p)¶ Return the file descriptor associated with p as an
int
. If the object is an integer, its value is returned. If not, the object’sfileno()
method is called if it exists; the method must return an integer, which is returned as the file descriptor value. Sets an exception and returns-1
on failure.
-
PyObject*
PyFile_GetLine
(PyObject *p, int n)¶ - Return value: New reference.
Еквівалентна
p.readline([n])
, ця функція читає один рядок з об’єкта p. p може бути файловим об’єктом або будь-яким об’єктом із методомreadline()
. Якщо n дорівнює0
, читається рівно один рядок, незалежно від довжини рядка. Якщо n більше ніж0
, з файлу буде прочитано не більше ніж n байт; можна повернути часткову лінію. В обох випадках повертається порожній рядок, якщо кінець файлу досягнуто негайно. Однак якщо n менше ніж0
, один рядок читається незалежно від довжини, алеEOFError
викликається, якщо кінець файлу досягнуто негайно.
-
int
PyFile_SetOpenCodeHook
(Py_OpenCodeHookFunction handler)¶ Перевизначає звичайну поведінку
io.open_code()
для передачі його параметра через наданий обробник.The handler is a function of type
PyObject *(*)(PyObject *path, void *userData)
, where path is guaranteed to bePyUnicodeObject
.Покажчик userData передається в функцію-перехоплювач. Оскільки функції підключення можуть викликатися з різних середовищ виконання, цей вказівник не повинен посилатися безпосередньо на стан Python.
Оскільки цей хук навмисно використовується під час імпорту, уникайте імпорту нових модулів під час його виконання, якщо тільки відомо, що вони заморожені або доступні в
sys.modules
.Після того, як хук встановлено, його не можна видалити або замінити, а пізніші виклики
PyFile_SetOpenCodeHook()
не вдадуться. У разі помилки функція повертає -1 і встановлює виняток, якщо інтерпретатор був ініціалізований.Цю функцію безпечно викликати перед
Py_Initialize()
.Викликає подію аудиту
setopencodehook
без аргументів.Нове в версії 3.8.