Файловые объекты¶
Эти API являются минимальной эмуляцией API Python 2 C для встроенных файловых объектов, которые полагались на поддержку буферизованного ввода-вывода (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)¶ - 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.
Возвращает дескриптор файла, связанный с p, в виде объекта int. Если объект является целым числом, то возвращается его значение. Если нет, вызывается метод
fileno()
объекта, если он существует; метод должен возвращать целое число, которое возвращается как значение дескриптора файла. Устанавливает исключение и возвращает-1
при неудаче.
-
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()
для передачи своего параметра через предоставленный обработчик.Обработчик является функцией типа PyObject *(*)(PyObject *path, void *userData), где path гарантированно является
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 Stable ABI.
Запись объекта obj в файловый объект p. Единственным поддерживаемым флагом для flags является
Py_PRINT_RAW
; если он задан, то вместоstr()
записываетсяrepr()
объекта. Возвращается0
при успехе или-1
при неудаче; будет установлено соответствующее исключение.
-
int
PyFile_WriteString
(const char *s, PyObject *p)¶ - Part of the Stable ABI.
Записать строку s в файловый объект p. Возврат
0
при успехе или-1
при неудаче; будет установлено соответствующее исключение.