The Very High Level Layer¶
本章中的函数将允许您执行文件或缓冲区中给出的Python源代码,但它们不会让您以更详细的方式与解释器进行交互。
其中几个函数接受语法的开始符号作为参数。可用的开始符号是Py_eval_input
,Py_file_input
和Py_single_input
。这些在接受它们作为参数的功能之后描述。
还请注意,其中的几个函数采用FILE*
参数。需要仔细处理的一个特定问题是不同C库的FILE
结构可能不同并且不兼容。在Windows下(至少),动态链接的扩展实际上可能使用不同的库,所以应该小心,FILE*
参数只有传递给这些函数,如果它确定它们被创建由Python运行时使用的库。
- int
Py_Main
(int argc, wchar_t **argv)¶ 标准解释器的主程序。这适用于嵌入Python的程序。argc和argv参数应该准确地传递给C程序的
main()
函数用户的区域设置)。重要的是注意参数列表可以被修改(但是参数列表指向的字符串的内容不是)。The return value will be0
if the interpreter exits normally (i.e., without an exception),1
if the interpreter exits due to an exception, or2
if the parameter list does not represent a valid Python command line.请注意,如果提交了未处理的
SystemExit
,此函数将不返回1
,而是退出该过程,只要Py_InspectFlag
。
- int
PyRun_AnyFile
(FILE *fp, const char *filename)¶ 这是以下
PyRun_AnyFileExFlags()
的简化界面,将closeit设置为0
和标志设置为 NULL。
- int
PyRun_AnyFileFlags
(FILE *fp, const char *filename, PyCompilerFlags *flags)¶ 这是下面
PyRun_AnyFileExFlags()
的简化接口,将closeit参数设置为0
。
- int
PyRun_AnyFileEx
(FILE *fp, const char *filename, int closeit)¶ 这是下面
PyRun_AnyFileExFlags()
的简化接口,将标志参数设置为NULL。
- int
PyRun_AnyFileExFlags
(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)¶ 如果fp指与交互设备(控制台或终端输入或Unix伪终端)关联的文件,则返回
PyRun_InteractiveLoop()
的值,否则返回结果PyRun_SimpleFile()
。filename是从文件系统编码(sys.getfilesystemencoding()
)解码的。如果filename为NULL,则此函数使用"???"
作为文件名。
- int
PyRun_SimpleString
(const char *command)¶ 这是下面
PyRun_SimpleStringFlags()
的简化接口,将PyCompilerFlags *参数设置为NULL。
- int
PyRun_SimpleStringFlags
(const char *command, PyCompilerFlags *flags)¶ 根据flags参数在
__main__
模块中从命令执行Python源代码。如果__main__
不存在,则创建它。如果发生异常,则返回成功时的0
或-1
。如果出现错误,则无法获取异常信息。关于标志的含义,请参见下文。请注意,如果提交了未处理的
SystemExit
,此函数将不返回-1
,而是退出该过程,只要Py_InspectFlag
组。
- int
PyRun_SimpleFile
(FILE *fp, const char *filename)¶ 这是以下
PyRun_SimpleFileExFlags()
的简化界面,将closeit设置为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读取的,而不是内存中的字符串。filename应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding()
)解码的。如果closeit为true,则在PyRun_SimpleFileExFlags返回之前关闭文件。
- int
PyRun_InteractiveOne
(FILE *fp, const char *filename)¶ 这是以下
PyRun_InteractiveOneFlags()
的简化接口,将标志设置为NULL。
- int
PyRun_InteractiveOneFlags
(FILE *fp, const char *filename, PyCompilerFlags *flags)¶ 根据flags参数从与交互式设备关联的文件读取并执行单个语句。将使用
sys.ps1
和sys.ps2
提示用户。filename是从文件系统编码(sys.getfilesystemencoding()
)解码的。当输入成功执行时,返回
0
,如果存在异常或errcode.h
中的错误代码-1
作为Python的一部分,如果有一个解析错误。(请注意,Python.h
不包括errcode.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
提示用户。filename是从文件系统编码(sys.getfilesystemencoding()
)解码的。在EOF返回0
。
- int
(*PyOS_InputHook)
(void)¶ 可以设置为指向原型
int func(void)
的函数。当Python的解释器提示即将变为空闲并等待来自终端的用户输入时,该函数将被调用。返回值被忽略。覆盖此钩子可用于将解释器的提示与其他事件循环集成,如Python源代码中的Modules/_tkinter.c
中所做。
- char*
(*PyOS_ReadlineFunctionPointer)
(FILE *, FILE *, const char *)¶ 可以设置为指向原型
char * func(FILE * stdin, FILE t4 > * stdout, char *提示符)
,覆盖用于在解释器读取单行输入的默认函数的提示。如果函数不是NULL,则希望输出字符串提示符,然后从提供的标准输入文件读取一行输入,返回结果字符串。例如,readline
模块设置此挂接以提供线路编辑和制表符完成功能。如果发生错误,结果必须是由
PyMem_RawMalloc()
或PyMem_RawRealloc()
或NULL分配的字符串。在版本3.4中更改:结果必须由
PyMem_RawMalloc()
或PyMem_RawRealloc()
分配,而不是由PyMem_Malloc()
或PyMem_Realloc()
。
- struct _node*
PyParser_SimpleParseString
(const char *str, int start)¶ 这是以下
PyParser_SimpleParseStringFlagsFilename()
的简化界面,将filename设置为NULL和标志设置为0
。
- struct _node*
PyParser_SimpleParseStringFlags
(const char *str, int start, int flags)¶ 这是以下
PyParser_SimpleParseStringFlagsFilename()
的简化接口,将filename设置为NULL。
- struct _node*
PyParser_SimpleParseStringFlagsFilename
(const char *str, const char *filename, int start, int flags)¶ 根据flags参数使用起始标记start解析str的Python源代码。结果可以用于创建可以有效计算的代码对象。如果代码片段必须多次计算,这是有用的。filename是从文件系统编码(
sys.getfilesystemencoding()
)解码的。
- struct _node*
PyParser_SimpleParseFile
(FILE *fp, const char *filename, int start)¶ 这是以下
PyParser_SimpleParseFileFlags()
的简化界面,将标记设置为0
。
- struct _node*
PyParser_SimpleParseFileFlags
(FILE *fp, const char *filename, int start, int flags)¶ 类似于
PyParser_SimpleParseStringFlagsFilename()
,但Python源代码是从fp读取的,而不是内存中的字符串。
- 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源代码 t3 >。全局必须是字典; locals可以是实现映射协议的任何对象。参数start指定应用于解析源代码的开始令牌。
返回以Python对象执行代码的结果,如果引发异常,则返回NULL。
- PyObject*
PyRun_File
(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)¶ - 返回值:新引用。
这是以下
PyRun_FileExFlags()
的简化界面,将closeit设置为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()
的简化界面,将closeit设置为0
。
- PyObject*
PyRun_FileExFlags
(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)¶ - 返回值:新引用。
类似于
PyRun_StringFlags()
,但是Python源代码是从fp读取的,而不是内存中的字符串。filename应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding()
)解码的。如果closeit为真,则文件在PyRun_FileExFlags()
返回之前关闭。
- PyObject*
Py_CompileString
(const char *str, const char *filename, int start)¶ - 返回值:新引用。
这是下面
Py_CompileStringFlags()
的简化接口,将标志设置为NULL。
- PyObject*
Py_CompileStringFlags
(const char *str, const char *filename, int start, PyCompilerFlags *flags)¶ - 返回值:新引用。
这是以下
Py_CompileStringExFlags()
的简化界面,其中optimize设置为-1
。
- PyObject*
Py_CompileStringObject
(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)¶ 在str中解析并编译Python源代码,返回生成的代码对象。起始令牌由start;这可以用于约束可以编译的代码,应为
Py_eval_input
,Py_file_input
或Py_single_input
。由filename指定的文件名用于构造代码对象,并可能出现在traceback或SyntaxError
异常消息中。如果无法解析或编译代码,则返回NULL。整数optimize指定编译器的优化级别;值
-1
选择由-O
选项给出的解释器的优化级别。显式级别为0
(无优化;__debug__
为真),1
(声明被删除,__debug__
)或2
(docstrings也被删除)。版本3.4中的新功能。
- PyObject*
Py_CompileStringExFlags
(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)¶ 像
Py_CompileStringExFlags()
,但filename是从文件系统编码(os.fsdecode()
)解码的字节字符串。版本3.2中的新功能。
- PyObject*
PyEval_EvalCode
(PyObject *co, PyObject *globals, PyObject *locals)¶ - 返回值:新引用。
这是
PyEval_EvalCodeEx()
的简化接口,只有代码对象,全局变量和局部变量。其他参数设置为NULL。
- PyObject*
PyEval_EvalCodeEx
(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)¶ 计算预编译的代码对象,给定特定的环境进行评估。这个环境包括全局变量的字典,局部变量的映射对象,参数数组,关键字和默认值,以及单元格的闭包元组。
-
PyFrameObject
¶ 用于描述框架对象的对象的C结构。此类型的字段可随时更改。
- PyObject*
PyEval_EvalFrame
(PyFrameObject *f)¶ 计算执行帧。这是到
PyEval_EvalFrameEx()
的简化接口,用于向后兼容。
- PyObject*
PyEval_EvalFrameEx
(PyFrameObject *f, int throwflag)¶ 这是Python解释的主要,未被抛弃的函数。它字面上2000行长。执行与执行帧f相关联的代码对象,解释字节码并根据需要执行调用。附加的throwflag参数通常可以忽略 - 如果为true,则会立即抛出异常;这用于生成器对象的
throw()
方法。在版本3.4中更改:此函数现在包括调试断言,以帮助确保它不会静默丢弃活动异常。
- int
PyEval_MergeCompilerFlags
(PyCompilerFlags *cf)¶ 此函数更改当前评估帧的标志,并在成功时返回true,在失败时返回false。
- int
Py_eval_input
¶ 单独表达式的Python语法的开始符号;用于
Py_CompileString()
。
- int
Py_file_input
¶ 来自Python语法的开始符号,用于从文件或其他源读取的语句序列;用于
Py_CompileString()
。这是在编译任意长的Python源代码时使用的符号。
- int
Py_single_input
¶ 单个语句的Python语法的开始符号;用于
Py_CompileString()
。这是用于交互式解释器循环的符号。
- struct
PyCompilerFlags
¶ 这是用于保存编译器标志的结构。在只编译代码的情况下,它作为
int flags
传递;在代码执行的情况下,PyCompilerFlags * flags
。在这种情况下,从 __未来__ 导入
可以修改标志。每当
PyCompilerFlags * flags
是NULL,cf_flags
被视为等于0
,并且由于来自 __ future __ import的引起的任何修改被丢弃。
struct PyCompilerFlags { int cf_flags; }