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

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

PyObject *PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
Возвращаемое значение: Новая ссылка. Part of the Стабильный 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 Стабильный ABI.

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

PyObject *PyFile_GetLine(PyObject *p, int n)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)

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

Обработчик - это функция типа:

typedef PyObject *(*Py_OpenCodeHookFunction)(PyObject*, void*)

Эквивалент PyObject *(*)(PyObject *path, void *userData), где путь гарантированно будет 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 Стабильный ABI.

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

int PyFile_WriteString(const char *s, PyObject *p)
Part of the Стабильный ABI.

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

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