文件对象 ¶
这些 API 是用于内置文件对象的 Python 2 C API 的最小仿真,使用依赖缓冲 I/O (
FILE
*
) 支持来自 C 标准库。在 Python 3,文件和流使用新
io
模块,其在 OS 低级无缓冲 I/O 之上定义了几个层。下文描述的函数是这些新 API 之上的方便 C 包裹器,且主要意味着解释器报告的内部错误;建议第 3 方代码访问
io
API 代之。
-
PyObject
*
PyFile_FromFd
(
int
fd
,
const
char
*
名称
,
const
char
*
mode
,
int
buffering
,
const
char
*
encoding
,
const
char
*
errors
,
const
char
*
newline
,
int
closefd
)
¶
-
返回值:新引用。
属于
稳定 ABI (应用程序二进制接口)
.
Create a Python file object from the file descriptor of an already opened file fd 。自变量 name , encoding , errors and newline 可以是
NULLto use the defaults; buffering 可以是 -1 to use the default. name is ignored and kept for backward compatibility. ReturnNULLon failure. For a more comprehensive description of the arguments, please refer to theio.open()function documentation.警告
Since Python streams have their own buffering layer, mixing them with OS-level file descriptors can produce various issues (such as unexpected ordering of data).
3.2 版改变: 忽略 name 属性。
-
int
PyObject_AsFileDescriptor
(
PyObject
*
p
)
¶
-
属于
稳定 ABI (应用程序二进制接口)
.
Return the file descriptor associated with p as an int . If the object is an integer, its value is returned. If not, the object’s
fileno()method is called if it exists; the method must return an integer, which is returned as the file descriptor value. Sets an exception and returns-1当故障时。
-
PyObject
*
PyFile_GetLine
(
PyObject
*
p
,
int
n
)
¶
-
返回值:新引用。
属于
稳定 ABI (应用程序二进制接口)
.
相当于
p.readline([n]), this function reads one line from the object p . p may be a file object or any object with areadline()方法。若 n is0, exactly one line is read, regardless of the length of the line. If n 大于0, no more than n bytes will be read from the file; a partial line can be returned. In both cases, an empty string is returned if the end of the file is reached immediately. If n 小于0, however, one line is read regardless of length, butEOFErroris raised if the end of the file is reached immediately.
-
int
PyFile_SetOpenCodeHook
(
Py_OpenCodeHookFunction
handler
)
¶
-
覆写正常行为的
io.open_code()透过提供的处理程序传递它的参数。The handler is a function of type:
-
typedef
PyObject
*
(
*
Py_OpenCodeHookFunction
)
(
PyObject
*
,
void
*
)
¶
-
Equivalent of PyObject * ( * ) ( PyObject * path , void * userData ) ,其中 path 保证是
PyUnicodeObject.
The userData 指针会被传入挂钩函数。由于可以从不同运行时调用挂钩函数,此指针不应直接引用 Python 状态。
由于此挂钩是在 import 期间有意使用的,避免导入新模块在其执行期间,除非知道它们被冻结或可用于
sys.modules.一旦设置挂钩,就无法移除 (或替换) 它,且稍后调用
PyFile_SetOpenCodeHook()将失败。当故障时,函数返回 -1 并设置异常若解释器已初始化。调用此函数是安全的先于
Py_Initialize().引发 审计事件
setopencodehook不带自变量。Added in version 3.8.
-
typedef
PyObject
*
(
*
Py_OpenCodeHookFunction
)
(
PyObject
*
,
void
*
)
¶