Operating System Utilities

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(目前在Windows上使用Microsoft Visual C ++编译器)时可用。USE_STACKCHECK将被自动定义;你不应该改变你自己的代码中的定义。

PyOS_sighandler_t PyOS_getsig(int i)

返回信号i的当前信号处理程序。这是sigaction()signal()的薄包装。不要直接调用这些函数!PyOS_sighandler_tvoid (*)(int)的typedef别名。

PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)

将信号i的信号处理程序设置为h;返回旧的信号处理程序。这是sigaction()signal()的薄包装。不要直接调用这些函数!PyOS_sighandler_tvoid (*)(int)的typedef别名。

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

使用surrogateescape error handler解码来自语言环境编码的字节字符串:不可解码字节解码为范围U + DC80..U + DCFF中的字符。如果字节序列可以解码为替代字符,则使用代理转义错误处理程序转义字节,而不是解码它们。

返回一个指向新分配的宽字符串的指针,使用PyMem_RawFree()释放内存。如果大小不是NULL,请将除空字符之外的宽字符数写入*size

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

解码错误绝不会发生,除非C库中有错误。

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

版本3.5中的新功能。

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

使用surrogateescape error handler将宽字符串编码为语言环境编码:范围U + DC80..U + DCFF中的替代字符将转换为字节0x80..0xFF。

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

如果error_pos不是NULL,则将*error_pos设置为编码错误上无效字符的索引,或设置为(size_t)-1除此以外。

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

版本3.5中的新功能。

System Functions

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

PyObject *PySys_GetObject(const char *name)
返回值:借用引用。

如果不存在,则返回sys模块或NULL中的对象name,而不设置异常。

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

除非vNULL,否则将sys模块中的名称设置为v case name从sys模块中删除。成功返回0,出现错误时返回-1

void PySys_ResetWarnOptions()

sys.warnoptions重置为空列表。

void PySys_AddWarnOption(wchar_t *s)

s附加到sys.warnoptions

void PySys_AddWarnOptionUnicode(PyObject *unicode)

unicode附加到sys.warnoptions

void PySys_SetPath(wchar_t *path)

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

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

格式描述的输出字符串写入sys.stdout没有发生异常,即使发生截断(见下文)。

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

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

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

作为PySys_WriteStdout(),但改为写入sys.stderrstderr

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

函数类似于PySys_WriteStdout(),但使用PyUnicode_FromFormatV()格式化消息,并且不将消息截断为任意长度。

版本3.2中的新功能。

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

作为PySys_FormatStdout(),但改为写入sys.stderrstderr

版本3.2中的新功能。

void PySys_AddXOption(const wchar_t *s)

s解析为一组-X选项,并将它们添加到由PySys_GetXOptions()返回的当前选项映射。

版本3.2中的新功能。

PyObject *PySys_GetXOptions()
返回值:借用引用。

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

版本3.2中的新功能。

Process Control

void Py_FatalError(const char *message)

打印致命错误消息并终止进程。不执行清除。这个函数只有在检测到条件时才会被调用,这会使继续使用Python解释器会有危险;例如,当对象管理似乎被破坏时。在Unix上,调用将尝试产生core文件的标准C库函数abort()

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。