非常高级别层

本章中的函数允许您执行文件或缓冲区中给定的Python源代码,但它们不允许您以更详细的方式与解释器进行交互。

其中一些函数接受语法中的开始符号作为参数。可用的开始符号是 Py_eval_inputPy_file_inputPy_single_input . 以下是接受它们作为参数的函数。

还要注意,其中几个函数 FILE* 参数。需要仔细处理的一个特殊问题是 FILE 不同C库的结构可能不同且不兼容。在Windows下(至少),动态链接扩展可以实际使用不同的库,因此应该注意 FILE* 只有在确定参数是由Python运行时使用的同一个库创建的情况下,才会将参数传递给这些函数。

int Py_Main(int argc, wchar_t **argv)

标准解释器的主程序。这对于嵌入python的程序是可用的。这个 argcargv 参数应与传递给C程序的参数完全相同。 main() 函数(根据用户的区域设置转换为wchar_t)。需要注意的是,参数列表可能会被修改(但参数列表指向的字符串的内容不会被修改)。返回值为 0 如果解释器正常退出(即,无例外情况), 1 如果解释器因异常退出,或 2 如果参数列表不代表有效的python命令行。

请注意,如果另一个未处理的 SystemExit 被引发,此函数将不返回 1 但退出进程,只要 Py_InspectFlag 未设置。

int Py_BytesMain(int argc, char **argv)

类似 Py_Main() 但是 argv 是字节字符串数组。

3.8 新版功能.

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

这是一个简化的接口 PyRun_AnyFileExFlags() 下面,离开 闭上 设置为 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() . 文件名 从文件系统编码中解码 (sys.getfilesystemencoding() )如果 文件名NULL ,此函数使用 "???" 作为文件名。

int PyRun_SimpleString(const char *command)

这是一个简化的接口 PyRun_SimpleStringFlags() 下面,离开 PyCompilerFlags * 参数设置为 NULL .

int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)

从中执行python源代码 命令__main__ 模块根据 flags 参数。如果 __main__ 不存在,已创建。返回 0 关于成功还是 -1 如果引发异常。如果出现错误,就无法获取异常信息。为了…的意义 flags 见下文。

请注意,如果另一个未处理的 SystemExit 被引发,此函数将不返回 -1 但退出进程,只要 Py_InspectFlag 未设置。

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 而不是存储器中的字符串。 文件名 应该是文件的名称,它是从 filesystem encoding and error handler 。如果 密闭 为真,则在此之前关闭文件 PyRun_SimpleFileExFlags() 返回。

注解

在Windows上, fp 应以二进制模式打开(例如 fopen(filename, "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.ps1sys.ps2文件名 是从 filesystem encoding and error handler

返回 0 成功执行输入时, -1 如果存在异常,或者 errcode.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.ps1sys.ps2文件名 是从 filesystem encoding and error handler 。退货 0 在EOF时为负数,或在故障时为负数。

int (*PyOS_InputHook)(void)

可以设置为指向带有原型的函数 int func(void) . 当python的解释器提示即将变为空闲并等待来自终端的用户输入时,将调用该函数。返回值被忽略。重写这个钩子可以用来将解释器的提示与其他事件循环集成,如 Modules/_tkinter.c 在python源代码中。

char *(*PyOS_ReadlineFunctionPointer)(FILE*, FILE*, const char*)

可以设置为指向带有原型的函数 char *func(FILE *stdin, FILE *stdout, char *prompt) ,重写用于在解释器提示下读取一行输入的默认函数。函数应输出字符串 促使 如果不是的话 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() 下面,离开 文件名 设置为 NULL旗帜 设置为 0 .

struct _node *PyParser_SimpleParseStringFlags(const char *str, int start, int flags)

这是一个简化的接口 PyParser_SimpleParseStringFlagsFilename() 下面,离开 文件名 设置为 NULL .

struct _node *PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags)

从解析Python源代码 str 使用开始令牌 开始 根据 旗帜 论点。结果可用于创建可有效评估的代码对象。如果代码段必须多次求值,则这很有用。 文件名 是从 filesystem encoding and error handler

struct _node *PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)

这是一个简化的接口 PyParser_SimpleParseFileFlags() 下面,离开 flags 设置为 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)
Return value: New reference.

这是一个简化的接口 PyRun_StringFlags() 下面,离开 旗帜 设置为 NULL .

PyObject *PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
Return value: New reference.

从执行python源代码 str 在对象指定的上下文中 globalslocals 具有由指定的编译器标志 flags . globals 必须是字典; locals 可以是实现映射协议的任何对象。参数 开始 指定应用于分析源代码的开始标记。

返回将代码作为python对象执行的结果,或者 NULL 如果引发异常。

PyObject *PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
Return value: New reference.

这是一个简化的接口 PyRun_FileExFlags() 下面,离开 闭上 设置为 0旗帜 设置为 NULL .

PyObject *PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)
Return value: New reference.

这是一个简化的接口 PyRun_FileExFlags() 下面,离开 旗帜 设置为 NULL .

PyObject *PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
Return value: New reference.

这是一个简化的接口 PyRun_FileExFlags() 下面,离开 closeit 设置为 0 .

PyObject *PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)
Return value: New reference.

类似于 PyRun_StringFlags() ,但是Python源代码是从 fp 而不是存储器中的字符串。 文件名 应该是文件的名称,它是从 filesystem encoding and error handler 。如果 密闭 为真,则在此之前关闭文件 PyRun_FileExFlags() 返回。

PyObject *Py_CompileString(const char *str, const char *filename, int start)
Return value: New reference.

这是一个简化的接口 Py_CompileStringFlags() 下面,离开 旗帜 设置为 NULL .

PyObject *Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)
Return value: New reference.

这是一个简化的接口 Py_CompileStringExFlags() 下面,用 optimize 设置为 -1 .

PyObject *Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)
Return value: New reference.

在中解析和编译python源代码 str ,返回结果代码对象。开始令牌由 开始 ;这可以用来约束可以编译的代码,并且应该 Py_eval_inputPy_file_inputPy_single_input . 由指定的文件名 文件名 用于构造代码对象,并可能出现在回溯或 SyntaxError 异常消息。这种回报 NULL 如果无法分析或编译代码。

整数 optimize 指定编译器的优化级别;值为 -1 选择解释器的优化级别,如 -O 选项。显式级别是 0 (无优化; __debug__ 是真的) 1 (断言被删除, __debug__ 是假的) 2 (文档字符串也被删除)。

3.4 新版功能.

PyObject *Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)
Return value: New reference.

喜欢 Py_CompileStringObject() ,但是 文件名 是从 filesystem encoding and error handler

3.2 新版功能.

PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
Return value: New reference.

这是一个简化的接口 PyEval_EvalCodeEx() ,只包含代码对象,以及全局和局部变量。其他参数设置为 NULL .

PyObject *PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject *const *args, int argcount, PyObject *const *kws, int kwcount, PyObject *const *defs, int defcount, PyObject *kwdefs, PyObject *closure)
Return value: New reference.

对预编译的代码对象进行评估,并为其评估提供特定的环境。此环境由全局变量字典、局部变量的映射对象、参数数组、关键字和默认值、的默认值字典组成。 keyword-only 参数和单元格的闭合元组。

type PyFrameObject

用于描述帧对象的对象的C结构。此类型的字段随时可能更改。

PyObject *PyEval_EvalFrame(PyFrameObject *f)
Return value: New reference.

评估执行框架。这是一个简化的接口 PyEval_EvalFrameEx() ,以实现向后兼容性。

PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Return value: New reference.

这是Python解释的主要、未上漆的功能。与执行帧关联的代码对象 f 执行,根据需要解释字节码并执行调用。附加的 投掷旗 通常可以忽略参数-如果为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 . 在这种情况下, from __future__ import 可以修改 flags .

无论何时 PyCompilerFlags *flagsNULLcf_flags 被视为等于 0 以及由于以下原因而进行的任何修改: from __future__ import 被丢弃。

int cf_flags

编译器标志。

int cf_feature_version

cf_feature_version 是次要的python版本。它应该初始化为 PY_MINOR_VERSION .

默认情况下,该字段被忽略,仅当且仅当 PyCF_ONLY_AST 在中设置了标志 cf_flags .

在 3.8 版更改: 补充 cf_feature_version 字段。

int CO_FUTURE_DIVISION

这个位可以设置在 flags 引起除法运算 / 根据 PEP 238 .