文件对象¶
这些API是对内置文件对象的python 2 c API的最小模拟,后者过去依赖于缓冲的I/O (FILE* )来自C标准库的支持。在python 3中,文件和流使用 io
模块,在操作系统的低级无缓冲I/O上定义多个层。下面描述的函数是这些新API的便利C包装器,主要用于解释程序中的内部错误报告;建议第三方代码访问 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 , 编码 , 错误 和 换行符 可以是
NULL
使用默认值; 缓冲 可以是 -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
.这个 用户数据 指针被传递到hook函数中。由于钩子函数可以从不同的运行时调用,所以该指针不应该直接引用Python状态。
由于这个钩子是在导入过程中故意使用的,所以在执行过程中避免导入新模块,除非知道它们被冻结或在
sys.modules
.一旦设置了钩子,就不能移除或替换钩子,稍后调用
PyFile_SetOpenCodeHook()
会失败的。失败时,函数返回-1,如果解释器已初始化,则设置异常。此函数在调用之前是安全的
Py_Initialize()
.引发一个 auditing event
setopencodehook
没有任何争论。3.8 新版功能.