这些 API 是用于内置文件对象的 Python 2 C API 的最小仿真,使用依赖缓冲 I/O (
FILE*
) 支持来自 C 标准库。在 Python 3,文件和流使用新
io
模块,其在 OS 低级无缓冲 I/O 之上定义了几个层。下文描述的函数是这些新 API 之上的方便 C 包裹器,且主要意味着解释器报告的内部错误;建议第 3 方代码访问
io
API 代之。
PyFile_FromFd
(
int
fd
, const char
*name
, const char
*mode
, int
buffering
, const char
*encoding
, const char
*errors
, const char
*newline
, int
closefd
)
¶
Create a Python file object from the file descriptor of an already opened file
fd
。自变量
name
,
encoding
,
errors
and
newline
可以是
NULL
to use the defaults;
buffering
可以是
-1
to use the default.
name
is ignored and kept for backward compatibility. Return
NULL
on failure. For a more comprehensive description of the arguments, please refer to the
io.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 属性。
PyObject_AsFileDescriptor
(
PyObject
*p
)
¶
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
当故障时。
PyFile_GetLine
(
PyObject
*p
, int
n
)
¶
相当于
p.readline([n])
, this function reads one line from the object
p
.
p
may be a file object or any object with a
readline()
方法。若
n
is
0
, 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, but
EOFError
is raised if the end of the file is reached immediately.
PyFile_SetOpenCodeHook
(
Py_OpenCodeHookFunction
handler
)
¶
覆写正常行为的
io.open_code()
透过提供的处理程序传递它的参数。
处理程序是函数为类型
PyObject *(*)(PyObject *path,
void *userData)
,其中
path
保证是
PyUnicodeObject
.
The userData 指针会被传入挂钩函数。由于可以从不同运行时调用挂钩函数,此指针不应直接引用 Python 状态。
由于此挂钩是在 import 期间有意使用的,避免导入新模块在其执行期间,除非知道它们被冻结或可用于
sys.modules
.
一旦设置挂钩,就无法移除 (或替换) 它,且稍后调用
PyFile_SetOpenCodeHook()
将失败。当故障时,函数返回 -1 并设置异常若解释器已初始化。
调用此函数是安全的先于
Py_Initialize()
.
引发
审计事件
setopencodehook
不带自变量。
3.8 版新增。