Объекты файлов¶File Objects
Эти API являются минимальной эмуляцией C API Python 2 для встроенных файловых объектов, которые ранее полагались на поддержку буферизированного ввода-вывода (FILE*) из стандартной библиотеки C. В Python 3 файлы и потоки используют новый модуль io, который определяет несколько уровней поверх низкоуровневого небуферизированного ввода-вывода операционной системы. Описанные ниже функции – это удобные обёртки на C для этих новых API, предназначенные в основном для внутреннего сообщения об ошибках в интерпретаторе; стороннему коду рекомендуется вместо этого использовать API io.
-
PyObject *
PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект файла Python из файлового дескриптора уже открытого файла fd. Аргументы name, encoding, errors и newline могут быть
NULLдля использования значений по умолчанию; buffering может быть -1 для использования значения по умолчанию. name игнорируется и сохранён для обратной совместимости. ВозвращаетNULLв случае неудачи. За более подробным описанием аргументов обратитесь к документации функцииio.open().Предупреждение
Поскольку потоки Python имеют собственный уровень буферизации, их смешивание с файловыми дескрипторами ОС может вызвать различные проблемы (например, непредсказуемый порядок данных).
Изменено в версии 3.2: Игнорируется атрибут name.
-
int
PyObject_AsFileDescriptor(PyObject *p)¶ - Часть Stable ABI.
Возвращает файловый дескриптор, связанный с p, в виде
int. Если объект является целым числом, возвращается его значение. Если нет, вызывается методfileno()объекта, если он существует; метод должен вернуть целое число, которое и будет значением файлового дескриптора. В случае ошибки устанавливает исключение и возвращает-1.
-
PyObject *
PyFile_GetLine(PyObject *p, int n)¶ - Возвращаемое значение: новая ссылка. Часть 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(), передавая его параметр через указанный обработчик.Обработчик – это функция типа
PyObject *(*)(PyObject *path, void *userData), где path гарантированно являетсяPyUnicodeObject.Указатель userData передаётся в функцию-обработчик. Поскольку функции-обработчики могут вызываться из разных сред выполнения, этот указатель не должен напрямую ссылаться на состояние Python.
Поскольку этот перехватчик намеренно используется во время импорта, избегайте импорта новых модулей во время его выполнения, если только они не заморожены или не доступны в
sys.modules.После установки перехватчик нельзя удалить или заменить; последующие вызовы
PyFile_SetOpenCodeHook()будут завершаться ошибкой. В случае неудачи функция возвращает -1 и устанавливает исключение, если интерпретатор уже инициализирован.Эту функцию можно безопасно вызывать до
Py_Initialize().Возбуждает событие аудита
setopencodehookбез аргументов.Новое в версии 3.8.
-
int
PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)¶ - Часть Stable ABI.
Записывает объект obj в файловый объект p. Единственный поддерживаемый флаг для flags – это
Py_PRINT_RAW; если он указан, записываетсяstr()объекта вместоrepr(). Возвращает0при успехе или-1при ошибке; устанавливается соответствующее исключение.
-
int
PyFile_WriteString(const char *s, PyObject *p)¶ - Часть Stable ABI.
Записывает строку s в файловый объект p. Возвращает
0при успехе или-1при ошибке; будет установлено соответствующее исключение.