Объекты 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()
методом. Если n0
, считывается ровно одна строка, независимо от длины строки. Если n больше0
, из файла будет прочитано не более n байт; может быть возвращена частичная строка. В обоих случаях при немедленном достижении конца файла возвращается пустая строка. Если n меньше0
, считывается одна строка независимо от длины, ноEOFError
поднимается при немедленном достижении конца файла.
-
int
PyFile_SetOpenCodeHook
(Py_OpenCodeHookFunction handler)¶ Переопределяет нормальное поведение
io.open_code()
, чтобы передать его параметр через предоставленный обработчик.Этот обработчик является функцией
PyObject *(*)(PyObject *path, void *userData)
, где гарантированно pathPyUnicodeObject
.Указатель 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
при неудаче; будет установлено соответствующее исключение.