On this page
高层层
本章中的函数将允许您执行文件或缓冲区中提供的 Python 源代码,但不允许您与解释器进行更详细的交互。
这些函数中的几个函数接受语法中的开始符号作为参数。可用的开始符号是Py_eval_input
,Py_file_input
和Py_single_input
。这些在接受它们作为参数的函数之后进行描述。
还要注意,其中一些函数带有FILE*
参数。需要谨慎处理的一个特殊问题是,不同 C 库的FILE
结构可能不同且不兼容。在 Windows(至少)下,动态链接的扩展实际上可能使用不同的库,因此应注意,只有在确定FILE*
参数是由与 Python 运行时相同的库创建的情况下,才将FILE*
参数传递给这些函数。正在使用。
- int
Py_Main
(int * argc *,wchar_t *** argv *)- 标准解释器的主程序。这适用于嵌入 Python 的程序。 * argc 和 argv *参数的准备应与传递给 C 程序的
main()
函数的参数完全一样(根据用户的语言环境转换为 wchar_t)。重要的是要注意,可以修改参数列表(但参数列表指向的字符串的内容不能修改)。如果解释器正常退出(即无 exception),则返回值为0
;如果解释器由于异常退出而返回的值为1
,如果参数列表未表示有效的 Python 命令行则返回2
。
- 标准解释器的主程序。这适用于嵌入 Python 的程序。 * argc 和 argv *参数的准备应与传递给 C 程序的
请注意,如果引发了其他未处理的SystemExit,则只要未设置Py_InspectFlag
,该函数就不会返回1
,而是退出该过程。
- int
Py_BytesMain
(int * argc *,char *** argv *)- 与Py_Main()相似,但* argv *是字节字符串数组。
3.8 版的新Function。
int
PyRun_AnyFile
(FILE *fp ,const char filename *)- 这是下面PyRun_AnyFileExFlags()的简化界面,* closeit 设置为
0
, flags *设置为NULL
。
- 这是下面PyRun_AnyFileExFlags()的简化界面,* closeit 设置为
int
PyRun_AnyFileFlags
(FILE *fp ,const char filename *,PyCompilerFlags ** flags *)- 这是下面PyRun_AnyFileExFlags()的简化接口,将* closeit *参数设置为
0
。
- 这是下面PyRun_AnyFileExFlags()的简化接口,将* closeit *参数设置为
int
PyRun_AnyFileEx
(FILE *fp ,const char filename *,int * closeit *)- 这是下面PyRun_AnyFileExFlags()的简化接口,将* flags *参数设置为
NULL
。
- 这是下面PyRun_AnyFileExFlags()的简化接口,将* flags *参数设置为
int
PyRun_AnyFileExFlags
(FILE *fp ,const char filename *,int * closeit *,PyCompilerFlags ** flags *)- 如果* fp *指向与交互式设备(控制台或终端 Importing 或 Unix 伪终端)关联的文件,则返回PyRun_InteractiveLoop()的值,否则返回PyRun_SimpleFile()的结果。 * filename 从文件系统编码(sys.getfilesystemencoding())解码。如果 filename *是
NULL
,则此函数使用"???"
作为文件名。
- 如果* fp *指向与交互式设备(控制台或终端 Importing 或 Unix 伪终端)关联的文件,则返回PyRun_InteractiveLoop()的值,否则返回PyRun_SimpleFile()的结果。 * filename 从文件系统编码(sys.getfilesystemencoding())解码。如果 filename *是
int
PyRun_SimpleString
(const char ** command *)- 这是下面PyRun_SimpleStringFlags()的简化接口,而将PyCompilerFlags *参数设置为
NULL
。
- 这是下面PyRun_SimpleStringFlags()的简化接口,而将PyCompilerFlags *参数设置为
int
PyRun_SimpleStringFlags
(const char *command ,PyCompilerFlags flags *)
请注意,如果引发了其他未处理的SystemExit,则只要未设置Py_InspectFlag
,该函数就不会返回-1
,而是退出该过程。
int
PyRun_SimpleFile
(FILE *fp ,const char filename *)- 这是下面PyRun_SimpleFileExFlags()的简化界面,* closeit 设置为
0
, flags *设置为NULL
。
- 这是下面PyRun_SimpleFileExFlags()的简化界面,* closeit 设置为
int
PyRun_SimpleFileEx
(FILE *fp ,const char filename *,int * closeit *)- 这是下面PyRun_SimpleFileExFlags()的简化界面,将* flags *设置为
NULL
。
- 这是下面PyRun_SimpleFileExFlags()的简化界面,将* flags *设置为
int
PyRun_SimpleFileExFlags
(FILE *fp ,const char filename *,int * closeit *,PyCompilerFlags ** flags *)- 与PyRun_SimpleStringFlags()相似,但是 Python 源代码是从* fp *读取的,而不是从内存中的字符串读取的。 * filename 应该是文件的名称,它是pass文件系统编码(sys.getfilesystemencoding())解码的。如果 closeit *为 true,则在 PyRun_SimpleFileExFlags 返回之前关闭文件。
Note
在 Windows 上,* fp *应该以二进制模式打开(例如fopen(filename, "rb")
。否则,Python 可能无法处理 LF 行正确结束的脚本文件。
int
PyRun_InteractiveOne
(FILE *fp ,const char filename *)- 这是下面PyRun_InteractiveOneFlags()的简化界面,将* flags *设置为
NULL
。
- 这是下面PyRun_InteractiveOneFlags()的简化界面,将* flags *设置为
int
PyRun_InteractiveOneFlags
(FILE *fp ,const char filename *,PyCompilerFlags ** flags *)- 根据* flags *参数从与交互式设备关联的文件中读取并执行一条语句。将使用
sys.ps1
和sys.ps2
提示用户。 * filename *从文件系统编码(sys.getfilesystemencoding())解码。
- 根据* flags *参数从与交互式设备关联的文件中读取并执行一条语句。将使用
成功执行 Importing 后,返回0
;如果发生异常,则返回-1
;如果存在解析错误,则返回errcode.h
include 文件中作为 Python 一部分分发的错误代码。 (请注意,Python.h
不包含errcode.h
,因此,如果需要,则必须特别包含.)
int
PyRun_InteractiveLoop
(FILE *fp ,const char filename *)- 这是下面PyRun_InteractiveLoopFlags()的简化界面,将* flags *设置为
NULL
。
- 这是下面PyRun_InteractiveLoopFlags()的简化界面,将* flags *设置为
int
PyRun_InteractiveLoopFlags
(FILE *fp ,const char filename *,PyCompilerFlags ** flags *)- 从与交互式设备关联的文件中读取和执行语句,直到达到 EOF。将使用
sys.ps1
和sys.ps2
提示用户。 * filename *从文件系统编码(sys.getfilesystemencoding())解码。在 EOF 处返回0
,失败时返回负数。
- 从与交互式设备关联的文件中读取和执行语句,直到达到 EOF。将使用
int
(*PyOS_InputHook)
(void)- 可以设置为指向原型
int func(void)
的函数。当 Python 的解释器提示将变为空闲并 await 来自终端的用户 Importing 时,将调用该函数。返回值将被忽略。覆盖此钩子可用于将解释器的提示与其他事件循环集成在一起,如 Python 源代码中的Modules/_tkinter.c
一样。
- 可以设置为指向原型
char *
(*PyOS_ReadlineFunctionPointer)
(FILE *,FILE *,const char ***)- 可以设置为指向原型
char *func(FILE *stdin, FILE *stdout, char *prompt)
的函数,该函数将覆盖用于在解释器提示下读取单行 Importing 的默认函数。如果不是NULL
,则该函数应该输出字符串* prompt *,然后从提供的标准 Importing 文件中读取一行 Importing,并返回结果字符串。例如,readline模块将此钩子设置为提供行编辑和制表符完成Function。
- 可以设置为指向原型
结果必须是由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
, flags *设置为0
。
- 这是下面PyParser_SimpleParseStringFlagsFilename()的简化接口,* filename 设置为
struct _node *
PyParser_SimpleParseStringFlags
(const char ** str *,int * start *,int * flags *)- 这是下面PyParser_SimpleParseStringFlagsFilename()的简化界面,而* filename *设置为
NULL
。
- 这是下面PyParser_SimpleParseStringFlagsFilename()的简化界面,而* filename *设置为
struct _node *
PyParser_SimpleParseStringFlagsFilename
(const char *str ,const char filename *,int * start *,int * flags *)- 根据* flags 参数,使用 start 令牌 start 从 str *解析 Python 源代码。结果可用于创建可以有效评估的代码对象。如果必须多次评估代码片段,这很有用。 * filename *从文件系统编码(sys.getfilesystemencoding())解码。
struct _node *
PyParser_SimpleParseFile
(FILE *fp ,const char filename *,int * start *)- 这是下面PyParser_SimpleParseFileFlags()的简化界面,将* flags *设置为
0
。
- 这是下面PyParser_SimpleParseFileFlags()的简化界面,将* flags *设置为
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()的简化界面,将* flags *设置为NULL
。
- PyObject *
PyRun_StringFlags
(const char **str ,int * start ,PyObject globals *,PyObject *locals ,PyCompilerFlags flags *)- 返回值:新参考.
在对象* globals 和 locals 指定的上下文中,pass str 指定的编译器标志从 str *执行 Python 源代码。 * globals *必须是字典; * locals 可以是实现 Map 协议的任何对象。参数 start *指定用于解析源代码的启动令牌。
返回将代码作为 Python 对象执行的结果;如果引发异常,则返回NULL
。
- PyObject *
PyRun_File
(FILE *fp ,const char filename *,int * start *,PyObject *globals ,PyObject locals *)- 返回值:新参考.
这是下面PyRun_FileExFlags()的简化界面,* closeit 设置为0
, flags *设置为NULL
。
- PyObject *
PyRun_FileEx
(FILE *fp ,const char filename *,int * start *,PyObject *globals ,PyObject locals *,int * closeit *)- 返回值:新参考.
这是下面PyRun_FileExFlags()的简化界面,将* flags *设置为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 应该是文件的名称,它是pass文件系统编码(sys.getfilesystemencoding())解码的。如果 closeit *为 true,则在PyRun_FileExFlags()返回之前关闭文件。
- PyObject *
Py_CompileString
(const char *str ,const char filename *,int * start *)- 返回值:新参考.
这是下面Py_CompileStringFlags()的简化界面,将* flags *设置为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 *指定的文件名用于构造代码对象,并可能出现在回溯或SyntaxError异常消息中。如果无法解析或编译代码,则返回NULL
。
整数* optimize *指定编译器的优化级别;值-1
选择-O选项给出的解释器的优化级别。显式级别为0
(无优化; __debug__
为 true),1
(语句已删除,__debug__
为 false)或2
(也删除了文档字符串)。
3.4 版的新Function。
- PyObject *
Py_CompileStringExFlags
(const char *str ,const char filename *,int * start *,PyCompilerFlags ** flags *,int * optimize *)- 返回值:新参考.
类似于Py_CompileStringObject(),但是* filename *是从文件系统编码(os.fsdecode())解码的字节字符串。
3.2 版中的新Function。
这是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 *)- 返回值:新参考.
给定一个特定的评估环境,评估预编译的代码对象。该环境由全局变量字典,局部变量 Map 对象,参数数组,关键字和默认值,keyword-only参数默认值字典以及单元格的闭合 Tuples 组成。
PyFrameObject
- 对象的 C 结构用于描述框架对象。此类型的字段随时可能更改。
PyObject *
PyEval_EvalFrame
(PyFrameObject ** f *)- 返回值:新参考.
评估执行框架。这是PyEval_EvalFrameEx()的简化接口,用于向后兼容。
- PyObject *
PyEval_EvalFrameEx
(PyFrameObject ** f *,int * throwflag *)- 返回值:新参考.
这是 Python 解释的主要Function。与执行帧* f 相关联的代码对象被执行,解释字节码并根据需要执行调用。额外的 throwflag *参数通常可以忽略-如果为 true,则它会立即引发异常;用于生成器对象的throw()方法。
在版本 3.4 中进行了更改:此函数现在包括调试 assert,以帮助确保它不会静默丢弃活动异常。
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()一起使用。这是用于交互式解释器循环的符号。
- 结构
PyCompilerFlags
- 这是用于保存编译器标志的结构。在仅编译代码的情况下,将其作为
int flags
传递,而在正在执行代码的情况下,将其作为PyCompilerFlags *flags
传递。在这种情况下,from __future__ import
可以修改* flags *。
- 这是用于保存编译器标志的结构。在仅编译代码的情况下,将其作为
每当PyCompilerFlags *flags
为NULL
时,cf_flags
被视为等于0
,并且由于from __future__ import
引起的任何修改都将被丢弃。
int
cf_flags
- Compiler flags.
int
cf_feature_version
-
- cf_feature_version *是次要的 Python 版本。应该将其初始化为
PY_MINOR_VERSION
。
- cf_feature_version *是次要的 Python 版本。应该将其初始化为
-
默认情况下,该字段将被忽略,并且仅当在* cf_flags *中设置PyCF_ONLY_AST
标志时才使用该字段。
在 3.8 版中进行了更改:添加了* cf_feature_version *字段。
- int
CO_FUTURE_DIVISION
- 可以在* flags *中设置该位,以使除法运算符
/
根据 PEP 238解释为“真除法”。
- 可以在* flags *中设置该位,以使除法运算符