Файлові об’єкти¶
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. 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.
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. 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()
для передачі його параметра через наданий обробник.The handler is a function of type:
-
typedef PyObject *(*Py_OpenCodeHookFunction)(PyObject*, void*)¶
Equivalent of PyObject *(*)(PyObject *path, void *userData), where path is guaranteed to be
PyUnicodeObject
.
Покажчик userData передається в функцію-перехоплювач. Оскільки функції підключення можуть викликатися з різних середовищ виконання, цей вказівник не повинен посилатися безпосередньо на стан Python.
Оскільки цей хук навмисно використовується під час імпорту, уникайте імпорту нових модулів під час його виконання, якщо тільки відомо, що вони заморожені або доступні в
sys.modules
.Після того, як хук встановлено, його не можна видалити або замінити, а пізніші виклики
PyFile_SetOpenCodeHook()
не вдадуться. У разі помилки функція повертає -1 і встановлює виняток, якщо інтерпретатор був ініціалізований.Цю функцію безпечно викликати перед
Py_Initialize()
.Викликає подію аудиту
setopencodehook
без аргументів.Added in version 3.8.
-
typedef PyObject *(*Py_OpenCodeHookFunction)(PyObject*, void*)¶
-
int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)¶
- Part of the Stable ABI.
Write object obj to file object p. The only supported flag for flags is
Py_PRINT_RAW
; if given, thestr()
of the object is written instead of therepr()
. Return0
on success or-1
on failure; the appropriate exception will be set.
-
int PyFile_WriteString(const char *s, PyObject *p)¶
- Part of the Stable ABI.
Записати рядок s до файлового об’єкта p. Повертає
0
у разі успіху або-1
у разі невдачі; буде встановлено відповідний виняток.