Файлові об’єкти

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’s fileno() 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 be PyUnicodeObject.

Покажчик userData передається в функцію-перехоплювач. Оскільки функції підключення можуть викликатися з різних середовищ виконання, цей вказівник не повинен посилатися безпосередньо на стан Python.

Оскільки цей хук навмисно використовується під час імпорту, уникайте імпорту нових модулів під час його виконання, якщо тільки відомо, що вони заморожені або доступні в sys.modules.

Після того, як хук встановлено, його не можна видалити або замінити, а пізніші виклики PyFile_SetOpenCodeHook() не вдадуться. У разі помилки функція повертає -1 і встановлює виняток, якщо інтерпретатор був ініціалізований.

Цю функцію безпечно викликати перед Py_Initialize().

Викликає подію аудиту setopencodehook без аргументів.

Нове в версії 3.8.

int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)

Write object obj to file object p. The only supported flag for flags is Py_PRINT_RAW; if given, the str() of the object is written instead of the repr(). Return 0 on success or -1 on failure; the appropriate exception will be set.

int PyFile_WriteString(const char *s, PyObject *p)

Записати рядок s до файлового об’єкта p. Повертає 0 у разі успіху або -1 у разі невдачі; буде встановлено відповідний виняток.