On this page
osUtil
返回* path *的文件系统表示形式。如果对象是str或bytes对象,则其引用计数将增加。如果对象实现os.PathLike接口,则只要它是str或bytes对象,就返回fspath()。否则,将引发TypeError并返回NULL
。
3.6 版的新Function。
int
Py_FdIsInteractive
(FILE *fp ,const char filename *)- 如果名称为* filename 的标准 I/O 文件 fp 被认为是交互式的,则返回 true(非零)。对于
isatty(fileno(fp))
为 true 的文件就是这种情况。如果全局标志Py_InteractiveFlag为 true,则如果 filename *指针为NULL
或名称等于字符串'<stdin>'
或'???'
之一,则此函数也返回 true。
- 如果名称为* filename 的标准 I/O 文件 fp 被认为是交互式的,则返回 true(非零)。对于
无效
PyOS_BeforeFork
()- 在流程派生之前准备一些内部状态的Function。在调用
fork()
或克隆当前进程的任何类似函数之前,应先调用此函数。仅在定义了fork()
的系统上可用。
- 在流程派生之前准备一些内部状态的Function。在调用
Warning
C fork()
调用只能从"main" interpreter的"main" thread进行。 PyOS_BeforeFork()
也是如此。
3.7 版中的新Function。
- 无效
PyOS_AfterFork_Parent
()- 在流程派生后更新某些内部状态的Function。在调用
fork()
或任何类似的克隆当前进程的函数之后,无论进程克隆是否成功,都应从父进程中调用它。仅在定义了fork()
的系统上可用。
- 在流程派生后更新某些内部状态的Function。在调用
Warning
C fork()
调用只能从"main" interpreter的"main" thread进行。 PyOS_AfterFork_Parent()
也是如此。
3.7 版中的新Function。
- 无效
PyOS_AfterFork_Child
()- 在流程派生后更新内部解释器状态的函数。必须在调用
fork()
或克隆当前进程的任何类似函数之后从子进程中调用该函数,如果该进程有可能会回调回 Python 解释器中。仅在定义了fork()
的系统上可用。
- 在流程派生后更新内部解释器状态的函数。必须在调用
Warning
C fork()
调用只能从"main" interpreter的"main" thread进行。 PyOS_AfterFork_Child()
也是如此。
3.7 版中的新Function。
See also
os.register_at_fork()允许注册由PyOS_BeforeFork(),PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()调用的自定义 Python 函数。
- 无效
PyOS_AfterFork
()- 在流程派生后更新某些内部状态的Function;如果将 continue 使用 Python 解释器,则应在新过程中调用此方法。如果将新的可执行文件加载到新进程中,则不需要调用此函数。
从 3.7 版开始不推荐使用:PyOS_AfterFork_Child()取代了此Function。
int
PyOS_CheckStack
()- 当解释器的堆栈空间不足时,返回 true。这是可靠的检查,但仅在定义
USE_STACKCHECK
时可用(当前在 Windows 上使用 Microsoft Visual C 编译器)。USE_STACKCHECK
将被自动定义;您永远不要在自己的代码中更改定义。
- 当解释器的堆栈空间不足时,返回 true。这是可靠的检查,但仅在定义
PyOS_sighandler_t
PyOS_getsig
(int * i *)- 返回 signal* i *的当前 signal 处理程序。这是围绕
sigaction()
或signal()
的薄包装。不要直接调用这些Function!PyOS_sighandler_t
是void (*)(int)
的 typedef 别名。
- 返回 signal* i *的当前 signal 处理程序。这是围绕
PyOS_sighandler_t
PyOS_setsig
(int * i *,PyOS_sighandler_t * h *)- 将 signal* i 的 signal 处理程序设置为 h *;返回旧的 signal 处理程序。这是围绕
sigaction()
或signal()
的薄包装。不要直接调用这些Function!PyOS_sighandler_t
是void (*)(int)
的 typedef 别名。
- 将 signal* i 的 signal 处理程序设置为 h *;返回旧的 signal 处理程序。这是围绕
wchar_t *
Py_DecodeLocale
(const char * * arg *,size_t ** size *)- 使用surrogateescape 错误处理程序从语言环境编码中解码字节字符串:无法解码的字节将解码为 U DC80..U DCFF 范围内的字符。如果可以将字节序列解码为替代字符,请使用替代错误处理程序对字节进行转义,而不是对其进行解码。
编码,从最高优先级到最低优先级:
UTF-8
在 macOS,Android 和 VxWorks 上;如果Py_LegacyWindowsFSEncodingFlag为零,则在 Windows 上为
UTF-8
;UTF-8
如果启用了 Python UTF-8 模式;ASCII
如果LC_CTYPE
语言环境为"C"
,则nl_langinfo(CODESET)
返回ASCII
编码(或别名),并且mbstowcs()
和wcstombs()
函数使用ISO-8859-1
编码。当前的语言环境编码。
返回指向新分配的宽字符串的指针,使用PyMem_RawFree()释放内存。如果 size 不是NULL
,请将除空字符之外的宽字符数写入*size
如果解码错误或内存分配错误,则返回NULL
。如果* size *不是NULL
,则在发生内存错误时将*size
设置为(size_t)-1
,或在解码错误时将*size
设置为(size_t)-2
。
除非 C 库中存在错误,否则永远不会发生解码错误。
使用Py_EncodeLocale()函数将字符串编码回字节字符串。
3.5 版中的新Function。
在版本 3.7 中更改:该函数现在在 UTF-8 模式下使用 UTF-8 编码。
在版本 3.8 中更改:现在,如果Py_LegacyWindowsFSEncodingFlag为零,则该函数在 Windows 上使用 UTF-8 编码;
- char *
Py_EncodeLocale
(const wchar_t *text ,size_t error_pos *)- 使用surrogateescape 错误处理程序将宽字符串编码为语言环境编码:U DC80..U DCFF 范围内的替代字符将转换为字节 0x80..0xFF。
编码,从最高优先级到最低优先级:
UTF-8
在 macOS,Android 和 VxWorks 上;如果Py_LegacyWindowsFSEncodingFlag为零,则在 Windows 上为
UTF-8
;UTF-8
如果启用了 Python UTF-8 模式;ASCII
如果LC_CTYPE
语言环境为"C"
,则nl_langinfo(CODESET)
返回ASCII
编码(或别名),并且mbstowcs()
和wcstombs()
函数使用ISO-8859-1
编码。当前的语言环境编码。
该函数在 Python UTF-8 模式下使用 UTF-8 编码。
返回一个指向新分配的字节字符串的指针,使用PyMem_Free()释放内存。返回NULL
编码错误或内存分配错误
如果 error_pos 不是NULL
,则成功时将*error_pos
设置为(size_t)-1
,或者在编码错误时将*error_pos
设置为无效字符的索引。
使用Py_DecodeLocale()函数将字节字符串解码回宽字符串。
See also
3.5 版中的新Function。
在版本 3.7 中更改:该函数现在在 UTF-8 模式下使用 UTF-8 编码。
在版本 3.8 中更改:现在,如果Py_LegacyWindowsFSEncodingFlag为零,则该函数在 Windows 上使用 UTF-8 编码;
System Functions
这些是 Util 函数,这些函数使sys模块的Function可用于 C 代码。它们都与当前解释器线程的sys模块的字典一起工作,该字典包含在内部线程状态结构中。
- PyObject *
PySys_GetObject
(const char ** name *)- *返回值:借用参考。
从sys模块或NULL
(如果不存在)返回对象* name *,而不设置异常。
int
PySys_SetObject
(const char *name ,PyObject v *)- 除非** v 为
NULL
,否则将sys模块中的 name 设置为 v ,在这种情况下,将从 sys 模块中删除 name *。成功返回0
,错误返回-1
。
- 除非** v 为
无效
PySys_ResetWarnOptions
()- 将sys.warnoptions重置为空列表。可以在Py_Initialize()之前调用此函数。
无效
PySys_AddWarnOption
(const wchar_t ** s *)- 将* s *附加到sys.warnoptions。必须在Py_Initialize()之前调用此函数,以影响警告过滤器列表。
无效
PySys_AddWarnOptionUnicode
(PyObject ** unicode *)- 将 unicode *附加到sys.warnoptions。
注意:此函数目前无法从 CPython 实现中使用,因为必须在Py_Initialize()隐式导入warnings之前调用此函数才能生效,但必须在初始化足够的运行时以允许创建之前调用此函数 Unicode 对象。
无效
PySys_SetPath
(const wchar_t ** path *)- 将sys.path设置为在* path *中找到的路径的列表对象,该对象应该是用平台的搜索路径定界符(Unix 上为
:
,Windows 上为;
)分隔的路径的列表。
- 将sys.path设置为在* path *中找到的路径的列表对象,该对象应该是用平台的搜索路径定界符(Unix 上为
无效
PySys_WriteStdout
(const char ** format *,...)- 将* format *描述的输出字符串写入sys.stdout。即使发生截断,也不会引发异常(请参见下文)。
- format *应该将格式化输出字符串的总大小限制为 1000 字节或更小-1000 字节后,输出字符串将被截断。特别是,这意味着不应出现任何不受限制的“%s”格式;这些值应使用“%。 s”进行限制,其中是计算得出的十进制数,以使加上其他格式化文本的最大大小不超过 1000 个字节。还要注意“%f”,它可以打印数百位的非常大的数字。
如果出现问题,或者未设置sys.stdout,则格式化的消息将被写入实数(C 级)* stdout *。
无效
PySys_WriteStderr
(const char ** format *,...)- 与PySys_WriteStdout()一样,但改为写入sys.stderr或* stderr *。
无效
PySys_FormatStdout
(const char ** format *,...)- Function类似于 PySys_WriteStdout(),但是使用PyUnicode_FromFormatV()格式化消息,并且不要将消息截断为任意长度。
3.2 版中的新Function。
- 无效
PySys_FormatStderr
(const char ** format *,...)- 与PySys_FormatStdout()一样,但改为写入sys.stderr或* stderr *。
3.2 版中的新Function。
- 无效
PySys_AddXOption
(const wchar_t ** s *)- 将* s *解析为一组-X选项,并将它们添加到PySys_GetXOptions()返回的当前选项 Map 中。可以在Py_Initialize()之前调用此函数。
3.2 版中的新Function。
- PyObject *
PySys_GetXOptions
( )- *返回值:借用参考。
返回与sys._xoptions类似的-X选项的当前字典。出错时,将返回NULL
并设置异常。
3.2 版中的新Function。
- int
PySys_Audit
(const char *event ,const char format *,...)- 使用任何活动的钩子引发审核事件。如果成功则返回零,失败则返回零。
如果添加了任何钩子,则* format *和其他参数将用于构造要传递的 Tuples。除N
以外,还提供与Py_BuildValue()中使用的相同格式字符。如果构建的值不是 Tuples,则将其添加到单元素 Tuples 中。 (N
format 选项使用一个引用,但是由于无法知道是否将使用此函数的参数,因此使用它可能会导致引用泄漏.)
请注意,无论是否定义了PY_SSIZE_T_CLEAN
,#
格式字符都应始终被视为Py_ssize_t
。
sys.audit()pass Python 代码执行相同的Function。
3.8 版的新Function。
在版本 3.8.2 中更改:#
格式字符要求Py_ssize_t
。以前,提出了不可避免的弃用警告。
- int
PySys_AddAuditHook
(Py_AuditHookFunction * hook *,void ** userData *)- 将可调用的* hook *附加到活动审核钩子列表中。成功返回零,失败返回非零。如果运行时已初始化,则还要在失败时设置错误。pass此 API 添加的钩子将针对运行时创建的所有解释器进行调用。
- userData *指针被传递到钩子函数中。由于可以从不同的运行时调用钩子函数,因此该指针不应直接引用 Python 状态。
可以安全地在Py_Initialize()之前调用此函数。在运行时初始化后调用时,将通知现有审核钩子,并可能pass引发从Exception子类化的错误来静默中止该操作(其他错误不会被静默)。
钩子函数的类型为int (*)(const char *event, PyObject *args, void *userData)
,其中* args *保证为PyTupleObject。始终使用引发事件的 Python 解释器持有的 GIL 来调用 hook 函数。
有关审核的详细说明,请参见 PEP 578。 审核事件表中列出了引发事件的运行时和标准库中的函数。详细信息在每个Function的文档中。
如果解释器已初始化,则此函数将引发不带参数的审核事件sys.addaudithook
。如果任何现有的钩子引发了从Exception派生的异常,则不会添加新的钩子,并且将清除该异常。如此一来,除非调用者控制所有现有的钩子,否则无法假定他们的钩子已添加。
3.8 版的新Function。
Process Control
- 无效
Py_FatalError
(const char ** message *)- 打印致命错误消息并终止进程。不执行清理。仅当检测到可能会 continue 使用 Python 解释器的危险的条件时,才应调用此函数。例如,当对象 Management 似乎已损坏时。在 Unix 上,将调用标准 C 库函数
abort()
,它将try生成core
文件。
- 打印致命错误消息并终止进程。不执行清理。仅当检测到可能会 continue 使用 Python 解释器的危险的条件时,才应调用此函数。例如,当对象 Management 似乎已损坏时。在 Unix 上,将调用标准 C 库函数
- 无效
Py_Exit
(int 状态)- 退出当前进程。这将调用Py_FinalizeEx(),然后调用标准 C 库函数
exit(status)
。如果Py_FinalizeEx()指示错误,则退出状态设置为 120.
- 退出当前进程。这将调用Py_FinalizeEx(),然后调用标准 C 库函数
在版本 3.6 中更改:终结处理中的错误不再被忽略。
- int
Py_AtExit
(void(** func *)())- 注册一个由Py_FinalizeEx()调用的清理函数。清理函数将不带任何参数调用,并且不返回任何值。最多可以注册 32 个清除Function。注册成功后,Py_AtExit()返回
0
;如果失败,则返回-1
。最后注册的清除Function首先被调用。每个清理函数最多被调用一次。由于 Python 的内部完成工作将在 cleanup 函数之前完成,因此* func *不应调用 Python API。
- 注册一个由Py_FinalizeEx()调用的清理函数。清理函数将不带任何参数调用,并且不返回任何值。最多可以注册 32 个清除Function。注册成功后,Py_AtExit()返回