Объекты File

Приведенное API являются минимальной эмуляцией API Python 2 C для встроенных файловых объектов, которые полагатается использовать для поддержку буферизованных I/O (FILE*) из стандартной библиотеки C. В Python 3 файлы и потоки используют новый модуль io, который определяет несколько уровней на низкоуровневое I/O операционной системы без буферизации. Описанные ниже функции представляют собой удобные обертки C над этими новыми 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)
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)

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

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(), чтобы передать его параметр через предоставленный обработчик.

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

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

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

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

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

Raises an auditing event setopencodehook with no arguments.

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

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

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

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

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