操作系统实用程序

PyObject *PyOS_FSPath(PyObject *path)
Return value: New reference.

返回的文件系统表示形式 path . 如果对象是 strbytes 对象,则其引用计数递增。如果对象实现 os.PathLike 接口,然后 __fspath__() 只要是一个 strbytes 对象。否则 TypeError 被抚养和 NULL 返回。

3.6 新版功能.

int Py_FdIsInteractive(FILE *fp, const char *filename)

如果标准I/O文件 fp 有名字 文件名 被视为互动。这就是文件的情况 isatty(fileno(fp)) 是真的。如果全局标志 Py_InteractiveFlag 为true,如果 文件名 指针是 NULL 或者如果名称等于其中一个字符串 '<stdin>''???' .

void PyOS_BeforeFork()

函数在进程复刻前准备一些内部状态。这应该在调用之前调用 fork() 或者复制当前进程的任何类似函数。仅适用于以下系统: fork() 定义。

警告

首席执行官 fork() 只能从 "main" thread (属于 "main" interpreter ). 同样的道理 PyOS_BeforeFork() .

3.7 新版功能.

void PyOS_AfterFork_Parent()

函数更新进程复刻后的一些内部状态。应该在调用后从父进程调用 fork() 或复制当前进程的任何类似功能,无论进程复制是否成功。仅适用于以下系统: fork() 定义。

警告

首席执行官 fork() 只能从 "main" thread (属于 "main" interpreter ). 同样的道理 PyOS_AfterFork_Parent() .

3.7 新版功能.

void PyOS_AfterFork_Child()

函数更新进程复刻后的内部解释器状态。必须在调用后从子进程调用 fork() 或者复制当前进程的任何类似函数,如果有任何机会,进程将回调到Python解释器中。仅适用于以下系统: fork() 定义。

警告

首席执行官 fork() 只能从 "main" thread (属于 "main" interpreter ). 同样的道理 PyOS_AfterFork_Child() .

3.7 新版功能.

参见

os.register_at_fork() 允许注册自定义python函数 PyOS_BeforeFork()PyOS_AfterFork_Parent()PyOS_AfterFork_Child() .

void PyOS_AfterFork()

函数在进程复刻之后更新一些内部状态;如果继续使用Python解释器,则应在新进程中调用此函数。如果新的可执行文件加载到新进程中,则不需要调用此函数。

3.7 版后已移除: 此功能被取代 PyOS_AfterFork_Child() .

int PyOS_CheckStack()

当解释器耗尽堆栈空间时返回true。这是一个可靠的检查,但只有在 USE_STACKCHECK 定义(当前使用微软Visual C++编译器在Windows上)。 USE_STACKCHECK 将自动定义;您不应更改自己代码中的定义。

PyOS_sighandler_t PyOS_getsig(int i)

返回信号的当前信号处理程序 i . 这两个都是薄封装 sigaction()signal() . 不要直接调用这些函数! PyOS_sighandler_t 是的typedef别名 void (*)(int) .

PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)

为信号设置信号处理程序 i 成为 h ;返回旧的信号处理程序。这两个都是薄封装 sigaction()signal() . 不要直接调用这些函数! PyOS_sighandler_t 是的typedef别名 void (*)(int) .

wchar_t *Py_DecodeLocale(const char *arg, size_t *size)

警告

此函数不应直接调用:请使用 PyConfig API与 PyConfig_SetBytesString() 该函数可确保 Python is preinitialized

此函数之前不得调用 Python is preinitialized 以便正确配置LC_CTYPE区域设置:请参阅 Py_PreInitialize() 功能。

属性中的字节字符串进行解码。 filesystem encoding and error handler 。如果错误处理程序是 surrogateescape error handler ,无法解码的字节被解码为U+DC80..U+DCFF范围内的字符;如果字节序列可以解码为代理字符,则使用代理转义错误处理程序转义字节,而不是解码它们。

返回指向新分配的宽字符串的指针,使用 PyMem_RawFree() 释放内存。如果尺寸不是 NULL ,将不包括空字符的宽字符数写入 *size

返回 NULL 解码错误或内存分配错误。如果 size 不是 NULL*size 设置为 (size_t)-1 出现内存错误或设置为 (size_t)-2 解码错误时。

这个 filesystem encoding and error handler 由以下人员选择 PyConfig_Read() :请参见 filesystem_encodingfilesystem_errors 成员: PyConfig

除非C库中存在错误,否则永远不会发生解码错误。

使用 Py_EncodeLocale() 函数将字符串编码回字节字符串。

3.5 新版功能.

在 3.7 版更改: 该函数现在在 Python UTF-8 Mode

在 3.8 版更改: 函数现在在Windows中使用UTF-8编码,如果 Py_LegacyWindowsFSEncodingFlag 为零;

char *Py_EncodeLocale(const wchar_t *text, size_t *error_pos)

将宽字符串编码到 filesystem encoding and error handler 。如果错误处理程序是 surrogateescape error handler ,将U+DC80..U+DCFF范围内的代理项字符转换为字节0x80..0xFF。

返回指向新分配的字节字符串的指针,使用 PyMem_Free() 释放内存。返回 NULL 关于编码错误或内存分配错误

如果错误“pos”不是 NULL*error_pos 设置为 (size_t)-1 如果成功,或者在编码错误时设置为无效字符的索引。

这个 filesystem encoding and error handler 由以下人员选择 PyConfig_Read() :请参见 filesystem_encodingfilesystem_errors 成员: PyConfig

使用 Py_DecodeLocale() 函数将字节字符串解码回宽字符串。

警告

此函数之前不得调用 Python is preinitialized 以便正确配置LC_CTYPE区域设置:请参阅 Py_PreInitialize() 功能。

3.5 新版功能.

在 3.7 版更改: 该函数现在在 Python UTF-8 Mode

在 3.8 版更改: 函数现在在Windows中使用UTF-8编码,如果 Py_LegacyWindowsFSEncodingFlag 为零;

系统功能

这些是实用程序函数,它们使 sys 模块可访问C代码。它们都使用当前解释器线程的 sys 模块的dict,它包含在内部线程状态结构中。

PyObject *PySys_GetObject(const char *name)
Return value: Borrowed reference.

返回对象 namesys 模块或 NULL 如果它不存在,则不设置异常。

int PySys_SetObject(const char *name, PyObject *v)

集合 namesys 模块到 v 除非 vNULL ,在这种情况下 name 从系统模块中删除。退换商品 0 关于成功, -1 关于错误。

void PySys_ResetWarnOptions()

重置 sys.warnoptions 到一个空列表。此函数可以在 Py_Initialize() .

void PySys_AddWarnOption(const wchar_t *s)

追加 ssys.warnoptions . 此函数必须在 Py_Initialize() 以影响警告筛选列表。

void PySys_AddWarnOptionUnicode(PyObject *unicode)

追加 unicodesys.warnoptions .

注意:此函数当前不能从cpython实现外部使用,因为必须在隐式导入之前调用它。 warnings 在里面 Py_Initialize() 为了有效,但在初始化足够的运行时以允许创建Unicode对象之前无法调用。

void PySys_SetPath(const wchar_t *path)

集合 sys.path 到在中找到的路径的列表对象 path 它应该是用平台的搜索路径分隔符分隔的路径列表 (: 在UNIX上, ; 在Windows上)。

void PySys_WriteStdout(const char *format, ...)

写入输出字符串 格式sys.stdout . 即使发生截断,也不会引发异常(见下文)。

格式 应将格式化输出字符串的总大小限制为1000字节或更小--在1000字节之后,输出字符串将被截断。特别是,这意味着不应出现不受限制的“%s”格式;应使用“%.<n>s”限制这些格式,其中,<n>是一个十进制数,计算得出,<n>加上其他格式化文本的最大大小不超过1000字节。还要注意“%f”,它可以为非常大的数字打印数百位数字。

如果出现问题,或 sys.stdout 未设置,格式化的消息将写入实际(C级) stdout .

void PySys_WriteStderr(const char *format, ...)

AS PySys_WriteStdout() 但写信给 sys.stderrstderr 相反。

void PySys_FormatStdout(const char *format, ...)

函数类似于pysys_writestdout(),但使用 PyUnicode_FromFormatV() 不要将消息截断为任意长度。

3.2 新版功能.

void PySys_FormatStderr(const char *format, ...)

AS PySys_FormatStdout() 但写信给 sys.stderrstderr 相反。

3.2 新版功能.

void PySys_AddXOption(const wchar_t *s)

解析 s 作为一套 -X 选项并将它们添加到当前选项映射中 PySys_GetXOptions() . 此函数可以在 Py_Initialize() .

3.2 新版功能.

PyObject *PySys_GetXOptions()
Return value: Borrowed reference.

返回的当前字典 -X 选项,类似于 sys._xoptions . 关于错误, NULL 返回并设置异常。

3.2 新版功能.

int PySys_Audit(const char *event, const char *format, ...)

使用任何活动挂钩引发审核事件。如果成功,则返回零;如果失败,则返回非零,并设置异常。

如果增加了钩子, 格式 其他参数将用于构造要传递的元组。除了 N ,与中使用的格式字符相同 Py_BuildValue() 可用。如果构建的值不是元组,它将被添加到单个元素元组中。(The N 格式选项使用引用,但由于无法知道是否使用此函数的参数,因此使用它可能会导致引用泄漏。)

注意 # 格式字符应始终视为 Py_ssize_t ,无论是否 PY_SSIZE_T_CLEAN 定义了。

sys.audit() 从python代码执行相同的函数。

3.8 新版功能.

在 3.8.2 版更改: 要求 Py_ssize_t 对于 # 格式化字符。此前,有人提出了不可避免的贬值警告。

int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)

追加可调用的 hook 到活动审核挂钩列表。成功时返回零,失败时返回非零。如果运行时已初始化,请在失败时设置错误。通过这个API添加的钩子将为运行时创建的所有解释器调用。

这个 用户数据 指针被传递到hook函数中。由于钩子函数可以从不同的运行时调用,所以该指针不应该直接引用Python状态。

此函数在调用之前是安全的 Py_Initialize() . 当在运行时初始化之后调用时,将通知现有的审计挂钩,并可能通过引发从中分类的错误子类而静默中止操作。 Exception (其他错误不会被消除)。

钩子功能为 int (*)(const char *event, PyObject *args, void *userData) 在哪里 args 保证是一个 PyTupleObject . 钩子函数总是通过引发事件的Python解释器持有的gil来调用。

PEP 578 有关审核的详细说明。运行库和标准库中引发事件的函数列在 audit events table . 每个函数的文档中都有详细信息。

提出一个 auditing event sys.addaudithook 没有参数。

3.8 新版功能.

过程控制

void Py_FatalError(const char *message)

打印致命错误消息并终止进程。不执行清理。仅当检测到使继续使用Python解释器变得危险的条件时(例如,当对象管理似乎已损坏时),才应调用此函数。在Unix上,标准的C库函数 abort() 将尝试生成 core 文件。

这个 Py_FatalError() 函数被替换为自动记录当前函数名称的宏,除非 Py_LIMITED_API 宏已定义。

在 3.9 版更改: 自动记录函数名。

void Py_Exit(int status)

退出当前进程。这个调用 Py_FinalizeEx() 然后调用标准的C库函数 exit(status) . 如果 Py_FinalizeEx() 指示错误,退出状态设置为120。

在 3.6 版更改: 终结过程中的错误不再被忽略。

int Py_AtExit(void (*func)())

注册要由调用的清除函数 Py_FinalizeEx() . 将不带参数调用cleanup函数,并且不应返回任何值。最多可以注册32个清理函数。注册成功后, Py_AtExit() 返回 0 ;失败时,它会返回 -1 . 首先调用最后注册的清理函数。每个清理函数最多调用一次。由于python的内部终结将在cleanup函数之前完成,因此不应该由 func .