本章中的函数将允许您执行在文件或缓冲区中给出的Python源代码,但它们将不允许您以更详细的方式与解释器进行交互。 其中几个函数接受语法中的开始符号作为参数。可用的开始符号是Py_eval_input、Py_file_input和Py_single_input。这些功能将根据接受它们作为参数的函数进行描述。 还要注意,其中一些函数采用FILE*
参数。需要仔细处理的一个特殊问题是,不同C库的文件结构可能是不同的和不兼容的。在Windows下(至少),动态链接扩展可以实际使用不同的库,因此应该注意,只有文件*参数确定它们是由Python运行时使用的相同库创建的,才会传递给这些函数。
int Py_Main(int argc, wchar_t **argv) 这是稳定的ABI的一部分。标准解释器的主要程序。这可以用于嵌入Python的程序。argc和argv参数应该与传递给C程序的主()函数的参数完全一样准备(根据用户的区域设置转换为wchar_t)。需要注意的是,可以被修改参数列表(但参数列表所指向的字符串的内容不会被修改)。如果解释器正常退出(即,没有异常),则返回值将为0,如果解释器由于异常而退出,则返回值将为1,如果参数列表不表示有效的Python命令行,则返回值将为2。 请注意,如果引发了以其他方式未处理的系统退出,则只要没有设置Py_InspectFlag,该函数将不会返回1,而是退出该进程。 int Py_BytesMain(int argc, char**argv) 自3.8版本以来的稳定ABI的一部分。类似于Py_Main(),但argv是一个字节字符串的数组。 int PyRun_AnyFile(FILE *fp, const char *filename) 这是下面PyRun_AnyFileExFlags()的简化接口,将关闭设置为0,标志设置为NULL。 int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) 这是下面对PyRun_AnyFileExFlags()的简化接口,将关闭参数设置为0。 int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit) 这是下面对PyRun_AnyFileExFlags()的简化接口,将flags参数设置为NULL。 int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags) 如果fp引用了与交互式设备(控制台或终端输入或Unix伪终端)相关联的文件,则返回PyRun_InteractiveLoop()的值,否则返回PyRun_SimpleFile()的结果。文件名从文件系统编码(sys.getfilesystemencoding())中进行解码。如果文件名为NULL,则此函数使用“???”作为文件名。如果关闭为真,则在PyRun_SimpleFileExFlags()返回之前关闭该文件。 int PyRun_SimpleString(constcharcommand) 这是下面PyRun_SimpleStringFlags()的简化接口,将Py编译flag 参数设置为NULL。 int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags) 根据标志参数,从__主__模块中的命令中执行Python源代码。如果__main__还不存在,则会创建它。如果成功时返回0,如果引发异常时返回-1。如果出现错误,则无法获取异常信息。关于旗帜的含义,请见下面。 请注意,如果引发了以其他方式未处理的系统退出,则只要没有设置Py_InspectFlag,该函数将不会返回-1,而是退出该进程。 int PyRun_SimpleFile(FILE *fp, const char *filename) 这是下面PyRun_SimpleFileExFlags()的简化接口,将关闭设置为0,标志设置为NULL。 int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit) 这是下面对PyRun_SimpleFileExFlags()的简化界面,将标记设置为NULL。 int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags) 类似于PyRun_SimpleStringFlags(),但是Python源代码是从fp读取的,而不是内存字符串。文件名应该是文件的名称,它是从文件系统编码和错误处理程序中解码出来的。如果关闭为真,则在PyRun_SimpleFileExFlags()返回之前关闭该文件。
备注:在窗口上,fp应该以二进制模式打开(例如,fopen(文件名,“rb”))。否则,Python可能无法正确处理以LF行结尾的脚本文件
int PyRun_InteractiveOne(FILE *fp, const char *filename) 这是下面对PyRun_InteractiveOneFlags()的简化界面,将标记设置为NULL。 int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) 根据标志参数,从与交互式设备关联的文件中读取并执行单个语句。系统将使用sys.ps1和sys.ps2提示用户。文件名从文件系统编码和错误处理程序中被解码。 当输入成功执行时返回0,如果出现异常,返回-1,如果出现解析错误,返回错误代码。h包含作为Python的一部分分发的文件。(注意,errcode.h不包含在Python.h中,所以如果需要,必须特别包含。) int PyRun_InteractiveLoop(FILE *fp, const char *filename) 这是下面对PyRun_InteractiveLoopFlags()的简化界面,将标记设置为NULL。 int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) 从与交互式设备关联的文件中读取并执行语句,直到达到EOF为止。系统将使用sys.ps1和sys.ps2提示用户。文件名从文件系统编码和错误处理程序中被解码。在EOF时返回0,或在失败时返回一个负数。 int (*PyOS_InputHook)(void) 这是稳定的ABI的一部分。可以设置为指向一个具有原型intfunc(foid)的函数。当Python的解释器提示即将空闲并等待终端输入时,该函数将被调用。此时将忽略返回值。重写此钩子可以用于将解释器的提示符与其他事件循环集成,就像在Python源代码中的模块/_tkinter.c中所做的那样。 char (PyOS_ReadlineFunctionPointer)(FILE , FILE , const char*) 可以设置为指向一个函数与原型字符*func(文件,文件,提示符),覆盖在解释器提示符下读取一行输入的默认函数。如果不是NULL,则该函数应该输出字符串提示符,然后从提供的标准输入文件中读取一行输入字符串,并返回结果字符串。例如,读取行模块将此钩子设置为提供行编辑和选项卡完成功能。 结果必须是由PyMem_RawMalloc()或PyMem_RawRealloc()分配的字符串,如果发生错误,则为NULL。 在3.4版更改:结果必须由PyMem_RawMalloc()或PyMem_RawRealloc()分配,而不是由PyMem_Malloc()或PyMem_Realloc()分配。 PyObject *PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals) 返回值:新引用。这是下面对PyRun_StringFlags()的简化界面,将标记设置为NULL。 PyObject *PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject locals, PyCompilerFlags flags) 返回值:新引用。在由对象指定的编译器标志指定的上下文中从str执行Python源代码。全局变量必须是字典;本地变量可以是实现映射协议的任何对象。参数start指定应该用于解析源代码的开始令牌。 返回以Python对象执行代码的结果,如果引发异常,则返回NULL。 PyObject *PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals) 返回值:新引用。这是下面PyRun_FileExFlags()的简化接口,将关闭设置为0,标志设置为NULL。 PyObject *PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit) 返回值:新引用。这是下面对PyRun_FileExFlags()的简化界面,将标记设置为NULL。 PyObject *PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals,PyCompilerFlags *flags) 返回值:新引用。这是下面PyRun_FileExFlags()的简化接口,将关闭设置为0。 PyObject *PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, intcloseit, PyCompilerFlags *flags) 返回值:新引用。类似于PyRun_StringFlags(),但是Python源代码是从fp读取的,而不是内存中的字符串。文件名应该是文件的名称,它是从文件系统编码和错误处理程序中解码出来的。如果关闭为真,则在PyRun_FileExFlags()返回之前关闭该文件。