Слой очень высокого уровня¶The Very High Level Layer
Функции этой главы позволяют выполнять исходный код Python, переданный в файле или буфере, но не дают возможности взаимодействовать с интерпретатором на более детальном уровне.
Некоторые из этих функций принимают начальный символ из грамматики в качестве параметра. Доступные начальные символы: Py_eval_input, Py_file_input и Py_single_input. Они описаны после функций, которые принимают их в качестве параметров.
Обратите также внимание, что некоторые из этих функций принимают параметры FILE*. Одна из проблем, требующих особой осторожности, заключается в том, что структура FILE для разных C-библиотек может быть разной и несовместимой. В Windows (по крайней мере) динамически связанные расширения могут использовать разные библиотеки, поэтому следует быть внимательным и передавать параметры FILE* этим функциям только в том случае, если есть уверенность, что они созданы той же библиотекой, которую использует среда выполнения Python.
-
int
Py_Main(int argc, wchar_t **argv)¶ Главная программа стандартного интерпретатора. Она доступна для программ, встраивающих Python. Параметры argc и argv следует подготовить так же, как они передаются функции
main()программы на C (с преобразованием в 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()(см. ниже), в котором параметр closeit установлен в0, а flags – в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()(см. ниже); аргумент flags оставлен равным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)¶ Выполняет исходный код Python из command в модуле
__main__в соответствии с аргументом flags. Если__main__не существует, он создаётся. Возвращает0при успехе или-1, если было возбуждено исключение. В случае ошибки получить информацию об исключении невозможно. Значение flags описано ниже.Обратите внимание: если возникло необрабатываемое иначе исключение
SystemExit, эта функция не возвращает-1, а завершает процесс, при условии, чтоPy_InspectFlagне установлен.
-
int
PyRun_SimpleFile(FILE *fp, const char *filename)¶ Это упрощённый интерфейс к
PyRun_SimpleFileExFlags()(см. ниже); closeit оставлен равным0, а flags –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.Примечание
В Windows fp должен быть открыт в двоичном режиме (например,
fopen(filename, "rb")). В противном случае Python может некорректно обрабатывать файлы сценариев, использующие окончания строк LF.
-
int
PyRun_InteractiveOne(FILE *fp, const char *filename)¶ Это упрощённый интерфейс к
PyRun_InteractiveOneFlags()(см. ниже), в котором параметр flags установлен вNULL.
-
int
PyRun_InteractiveOneFlags(FILE *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(FILE *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()). Возвращает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), переопределяя стандартную функцию для чтения одной строки ввода в приглашении интерпретатора. Ожидается, что функция выведет строку 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()ниже, оставляя filename установленным вNULLи flags установленным в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)¶ Разбирает исходный код Python из str, используя начальный токен start, в соответствии с аргументом flags. Результат можно использовать для создания объекта кода, который можно эффективно выполнять. Это полезно, если фрагмент кода нужно выполнить много раз. 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(), но исходный код 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)¶ - Возвращаемое значение: новая ссылка.
Выполняет исходный код Python из str в контексте, заданном объектами globals и locals, с флагами компилятора, указанными в flags. globals должен быть словарём; locals может быть любым объектом, реализующим протокол отображения. Параметр 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 должно быть именем файла; оно декодируется из кодировки файловой системы (sys.getfilesystemencoding()). Если closeit истинно, файл закрывается до того, как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)¶ - Возвращаемое значение: новая ссылка.
Разбирает и компилирует исходный код Python из str, возвращая полученный объект кода. Начальный токен задаётся start; его можно использовать для ограничения компилируемого кода; он должен быть
Py_eval_input,Py_file_inputилиPy_single_input. Имя файла, указанное filename, используется для создания объекта кода и может появляться в сообщениях трассировки или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)¶ - Возвращаемое значение: новая ссылка.
Как и
Py_CompileStringObject(), но 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 *const *args, int argcount, PyObject *const *kws, int kwcount, PyObject *const *defs, int defcount, PyObject *kwdefs, PyObject *closure)¶ - Возвращаемое значение: новая ссылка.
Выполняет предварительно скомпилированный объект кода в заданном окружении для его вычисления. Это окружение состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значений по умолчанию для только ключевых аргументов и кортежа замыкания с ячейками.
-
PyFrameObject¶ C-структура объектов, используемых для описания объектов фреймов. Поля этого типа могут быть изменены в любой момент.
-
PyObject*
PyEval_EvalFrame(PyFrameObject *f)¶ - Возвращаемое значение: новая ссылка.
Выполняет фрейм исполнения. Это упрощённый интерфейс к
PyEval_EvalFrameEx(), обеспечивающий обратную совместимость.
-
PyObject*
PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)¶ - Возвращаемое значение: новая ссылка.
Это основная, неприукрашенная функция интерпретации Python. Выполняется объект кода, связанный с фреймом исполнения 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. В этом случаеfrom __future__ importможет изменять flags.Когда
PyCompilerFlags *flagsравноNULL,cf_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