You are here:  Home » Python » 超高层 – Python / C API参考手册(Python教程)(参考资料)

非常高级别的层

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

其中一些函数接受语法中的起始符号作为参数。可用的起始符号是Py_eval_input,Py_file_inputPy_single_input。这些是在接受它们作为参数的函数之后描述的.

还注意这几个函数中的几个接受FILE*参数。需要仔细处理的一个特定问题是,不同C库的FILE结构可能不同且不兼容。UnderWindows(至少),动态链接扩展可能实际使用不同的库,所以应该注意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 PyRun_AnyFile FILE  *fpconst char  *filename
这是PyRun_AnyFileExFlags()下面的简化界面,将closeit设置为0flags设置为NULL.
int PyRun_AnyFileFlags FILE  *fp,const char  *filenamePyCompilerFlags  *flags
这是PyRun_AnyFileExFlags()下面的简化界面,将closeit参数设置为0.
int PyRun_AnyFileEx FILE  *fp,const char  *filename,int  closeit
这是PyRun_AnyFileExFlags()下面的简化界面,将flags参数设置为NULL.
int PyRun_AnyFileExFlags文件 *fp,const char  *filename,int  closeit,PyCompilerFlags  *flags
如果fp指的是与交互设备关联的文件(控制台或终端输入或Unix伪终端),返回PyRun_InteractiveLoop()的值,否则返回PyRun_SimpleFile(). filename从filesystemencoding(sys.getfilesystemencoding())解码。如果filenameNULL,这个函数使用"???"作为文件名.
int PyRun_SimpleString const char  *command
这是PyRun_SimpleStringFlags()下面,将PyCompilerFlags*参数设置为NULL.
int PyRun_SimpleStringFlags const char  *command,PyCompilerFlags  *flags
根据command__main__模块中执行flags论点。如果__main__它已经存在,它已经创建了。成功时返回0或者如果引发异常则返回-1。如果出现错误,则无法获取异常信息。对于flags的说明,请参见下文.

注意如果出现一个未处理的SystemExit,此函数将不会返回-1,但是退出进程,只要Py_InspectFlag没有设置

int PyRun_SimpleFile FILE  *fp,const char  *filename
这是PyRun_SimpleFileExFlags()下面的简化界面,将closeit设置为0flags设为NULL.
int PyRun_SimpleFileEx FILE  *fp,const char  *filename,int  closeit
这是一个简化的界面到PyRun_SimpleFileExFlags()下面,把flags设置为NULL.
int PyRun_SimpleFileExFlags FILE  *fp,const char  *filename,int  closeit,PyCompilerFlags  *flags
类似于PyRun_SimpleStringFlags(),但Python源代码是从fp读取的内存中的字符串。filename应该是文件的名称,它是从文件系统编码(sys.getfilesystemencoding())解码的。如果closeit是的,文件是在PyRun_SimpleFileExFlags返回之前关闭的.
int PyRun_InteractiveOne FILE  *fp,const char  *filename
这是PyRun_InteractiveOneFlags()下面的简化界面,将flags设置为NULL.
int PyRun_InteractiveOneFlags文件 *fp,const char  *filename,PyCompilerFlags  *flags
根据flags参数从与交互设备关联的文件中读取并执行单个语句。用户将使用sys.ps1进行提示并且sys.ps2. filename从文件系统编码解码(sys.getfilesystemencoding()).

返回0当输入成功执行时,-1如果有异常,或者来自errcode.h包含文件的错误代码作为Python的一部分分发,如果有解析错误的话。(注意errcode.h不包括Python.h,如果需要,必须特别包含。)

int PyRun_InteractiveLoop文件 *fp,const char  *filename
这是PyRun_InteractiveLoopFlags()下面的简化界面,将flags设置为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的解释器提示即将变为空闲并等待来自终端的用户输入时,将调用该函数。返回值被忽略。覆盖thishook可用于将解释器的提示与其他循环集成,如在@Python源代码中的Modules/_tkinter.c中所做的那样
char* (*PyOS_ReadlineFunctionPointer)文件 *,文件 *,常量字符 *
可以设置为指向原型的函数char *func(FILE *stdin, FILE *stdout, char *prompt),覆盖用于在解释器提示符下读取单行输入的默认函数。如果不是prompt,该功能有望输出字符串NULL,然后从提供的标准输入文件中读取一行输入,则返回结果字符串。例如,readline模块setsthis钩子提供行编辑和标签完成功能.

结果必须是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设置为NULLflags设置为0.
struct _node * PyParser_SimpleParseStringFlags const char  *str,int  start,int  flags
这是PyParser_SimpleParseStringFlagsFilename()的简化界面,留下filenamesetto NULL.
struct _node * PyParser_SimpleParseStringFlagsFilename const char  *str,const char  *filename,int  start,int flags
根据str使用开始标记startflags论点。结果可用于创建可以有效评估的代码对象。如果必须多次评估代码片段,这将非常有用。filename是从文件系统编码解码的(sys.getfilesystemencoding()).
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(),但Pythonsource代码是从fp而不是内存中的字符串中读取的.
PyObject* PyRun_String const char  *str,int  start,PyObject  *globals,PyObject  *locals
Return value: New reference.

这是到PyRun_StringFlags()下面的简化界面,将flags设置为NULL.

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

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

返回执行代码作为Python对象的结果,或NULL如果引发了异常.

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

这是PyRun_FileExFlags()下面的简化界面,将closeit设置为0flags设置为NULL.

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

这是PyRun_FileExFlags()下面的简化界面,留下flags设置为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(),但是从fp读取Python源代码而不是内存中的字符串。filename应该是文件的名称,它是从文件系统编码解码的(sys.getfilesystemencoding())。如果closeit是的,文件在PyRun_FileExFlags()returns之前关闭.

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

这是Py_CompileStringFlags()下面的简化界面,将flags设置为NULL.

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

这是Py_CompileStringExFlags()下面的简化界面,optimize设置为-1.

PyObject * Py_CompileStringObjectconst char  *str,PyObject  *filename,int  start,PyCompilerFlags  *flags,int  optimize
Return value: New reference.

解析和编译str,返回生成的代码对象。起始标记由start给出;这可以用来约束可以编译的代码,应该是Py_eval_input,Py_file_inputPy_single_input。由filename用于构造代码对象,可能出现在tracebacks或SyntaxError异常消息。如果代码无法解析或编译,则返回NULL

整数optimize指定编译器的优化级别;-1的avalue选择-O选项给出的解释器的优化级别。显式级别是0(没有优化; __debug__是真的),1(断言被删除,__debug__是假的)或2(docstrings也被删除).

版本3.4.

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

喜欢Py_CompileStringObject(),但filename是从文件系统编码解码的字节字符串(os.fsdecode()).

新版本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 参数和cells的闭包元组.

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解释的主要功能。它总长2000线。与执行帧相关的代码对象f执行,解释字节码并根据需要执行调用。附加throwflag参数大多可以忽略 – 如果为true,则会立即引发异常;这用于throw()生成器对象的方法.

更改版本3.4:此函数现在包含一个调试断言,以帮助确保它不会以静默方式丢弃活动exception.

int PyEval_MergeCompilerFlags PyCompilerFlags  *cf
这个函数改变当前评估框架的标志,并返回true成功,失败时错误.
int Py_eval_input

来自Python语法的起始符号用于孤立表达式;与Py_CompileString().

int Py_file_input

一起使用Python语法中的起始符号,用于从文件或其他源读取的语句序列;与Py_CompileString()一起使用。这是编译任意长Python源代码时使用的符号.

int Py_single_input

Python语法的起始符号表示单个语句;与Py_CompileString()一起使用。这是用于interactiveinterpreter循环的符号.

struct PyCompilerFlags
这是用于保存编译器标志的结构。如果代码只是编译,它将作为int flags,并且在代码被执行的情况下,它被传递为PyCompilerFlags *flags。在这种情况下, from__future__ import可以修改flags.

每当PyCompilerFlags *flagsNULL, cf_flags被视为等于0,以及由于from __future__ importisdiscarded.

struct PyCompilerFlags {
    int cf_flags;
}
int CO_FUTURE_DIVISION
这个位可以设置在flags引起分工/根据PEP 238 .

评论被关闭。