操作系统实用程序 — Python 文档
来自菜鸟教程
Python/docs/2.7/c-api/sys
操作系统实用程序
- int Py_FdIsInteractive(FILE *fp, const char *filename)
- 如果名称为 filename 的标准 I/O 文件 fp 被视为交互式,则返回 true(非零)。 对于
isatty(fileno(fp))
为真的文件就是这种情况。 如果全局标志Py_InteractiveFlag
为真,如果 filename 指针为 NULL 或名称等于字符串'<stdin>'
或'???'
。
- void PyOS_AfterFork()
- 在进程分叉后更新一些内部状态的函数; 如果将继续使用 Python 解释器,则应在新进程中调用此方法。 如果新的可执行文件加载到新进程中,则不需要调用此函数。
- int PyOS_CheckStack()
- 当解释器用完堆栈空间时返回 true。 这是一个可靠的检查,但仅在定义了
USE_STACKCHECK
时才可用(目前在使用 Microsoft Visual C++ 编译器的 Windows 上)。USE_STACKCHECK
会自动定义; 您永远不应该更改自己代码中的定义。
- PyOS_sighandler_t PyOS_getsig(int i)
- 返回信号 i 的当前信号处理程序。 这是
sigaction()
或signal()
的薄包装。 不要直接调用那些函数!PyOS_sighandler_t
是void (*)(int)
的 typedef 别名。
- PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)
- 将信号 i 的信号处理程序设置为 h; 返回旧的信号处理程序。 这是
sigaction()
或signal()
的薄包装。 不要直接调用那些函数!PyOS_sighandler_t
是void (*)(int)
的 typedef 别名。
系统功能
这些实用函数使 C 代码可以访问 sys 模块中的功能。 它们都与当前解释器线程的 sys 模块的字典一起工作,该字典包含在内部线程状态结构中。
- PyObject *PySys_GetObject(char *name)
- 从sys模块返回对象name,如果不存在则返回NULL,不设置异常。
- FILE *PySys_GetFile(char *name, FILE *def)
- 返回与 sys 模块中的对象 name 关联的
FILE*
,如果 name 不在 def 模块中,则返回模块或不与FILE*
关联。
- int PySys_SetObject(char *name, PyObject *v)
- 将 sys 模块中的 name 设置为 v,除非 v 为 NULL,在这种情况下 name 从 sys 模块中删除。 成功时返回
0
,错误时返回-1
。
- void PySys_ResetWarnOptions()
- 将 sys.warnoptions 重置为空列表。
- void PySys_AddWarnOption(char *s)
- 将 s 附加到 sys.warnoptions。
- void PySys_SetPath(char *path)
- 将 sys.path 设置为在 path 中找到的路径列表对象,它应该是用平台的搜索路径分隔符分隔的路径列表(
:
在 Unix 上,[ X175X] 在 Windows 上)。
- void PySys_WriteStdout(const char *format, ...)
将 format 描述的输出字符串写入 sys.stdout。 即使发生截断,也不会引发异常(见下文)。
format 应该将格式化输出字符串的总大小限制为 1000 字节或更少——在 1000 字节之后,输出字符串被截断。 特别是,这意味着不应出现不受限制的“%s”格式; 这些应该使用“%. s”在哪里是一个计算出来的十进制数,使得加上其他格式化文本的最大大小不超过 1000 字节。 还要注意“%f”,它可以为非常大的数字打印数百位数字。
如果出现问题,或者 sys.stdout 未设置,则格式化消息写入真实(C 级)stdout。
- void PySys_WriteStderr(const char *format, ...)
- 如上所述,但改为写入 sys.stderr 或 stderr。
过程控制
- void Py_FatalError(const char *message)
- 打印致命错误消息并终止进程。 不执行清理。 仅当检测到会导致继续使用 Python 解释器变得危险的情况时才应调用此函数; 例如,当对象管理似乎已损坏时。 在 Unix 上,标准 C 库函数
abort()
被调用,它将尝试生成一个core
文件。
- void Py_Exit(int status)
- 退出当前进程。 这将调用 Py_Finalize(),然后调用标准 C 库函数
exit(status)
。
- int Py_AtExit(void (*func)())
- 注册一个由 Py_Finalize() 调用的清理函数。 将在不带参数的情况下调用清理函数,并且不应返回任何值。 最多可以注册 32 个清理函数。 注册成功后,Py_AtExit()返回
0
; 失败时,它返回-1
。 最后注册的清理函数首先被调用。 每个清理函数最多被调用一次。 由于 Python 的内部终结将在清理函数之前完成,因此 func 不应调用任何 Python API。