Уровень Очень Высокого Уровня
Функции в этой главе позволят вам выполнить исходный код Python, заданный в файле или буфере, но они не позволят вам взаимодействовать с интерпретатором более подробно.
Несколько этих функций принимают начальный символ из грамматики в качестве параметра. Доступные начальные символы — Py_eval_input, Py_file_input и Py_single_input. Они описаны после функций, принимающих их в качестве параметров.
Обратите также внимание, что несколько этих функций принимают параметры FILE*. Одна конкретная проблема, которая требует тщательного обращения, заключается в том, что структура FILE для разных библиотек C может отличаться и быть несовместимой. В Windows (по крайней мере) динамически подключаемые расширения могут фактически использовать разные библиотеки, поэтому следует проявлять осторожность, чтобы параметры FILE* передавались только в эти функции, если точно известно, что они были созданы той же библиотекой, что и среда выполнения Python.
-
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, эта функция использует"???"в качестве имени файла. Если closeit истинно, файл закрывается до того, какPyRun_SimpleFileExFlags()вернётся.
-
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, а завершит процесс, еслиPyConfig.inspectравно нулю.
-
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 должно быть именем файла, оно декодируется из кодировки файловой системы и обработчика ошибок. Если 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 декодируется из кодировки файловой системы и обработчика ошибок.Возвращает
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 декодируется из кодировки файловой системы и обработчика ошибок. Возвращает0при EOF или отрицательное число при ошибке.
-
int (*PyOS_InputHook)(void) -
Часть Стабильной ABI.
Может быть задано для указания на функцию с прототипом
int func(void). Функция будет вызываться, когда интерпретатор Python собирается перейти в режим ожидания и дождаться пользовательского ввода с терминала. Возвращаемое значение игнорируется. Переопределение этого обработчика можно использовать для интеграции приглашения интерпретатора с другими циклами событий, как это сделано вModules/_tkinter.cв исходном коде Python.Изменено в версии 3.12: Эта функция вызывается только из главного интерпретатора.
-
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().Изменено в версии 3.12: Эта функция вызывается только из главного интерпретатора.
-
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 должно быть именем файла, оно декодируется с использованием кодировки файловой системы и обработчика ошибок. Если closeit равно истине, файл закрывается перед возвратомPyRun_FileExFlags().
-
PyObject *Py_CompileString(const char *str, const char *filename, int start) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Это упрощённый интерфейс к
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 — строка байтов, декодированная с помощью кодировки файловой системы и обработчика ошибок.Добавлен в версии 3.2.
-
PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Это упрощённый интерфейс к
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) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Выполнение предварительно скомпилированного объекта кода в заданной среде выполнения. Эта среда состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значений по умолчанию для ключевых аргументов и кортежа замыканий ячеек.
-
PyObject *PyEval_EvalFrame(PyFrameObject *f) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Выполнение кадра выполнения. Это упрощённый интерфейс к
PyEval_EvalFrameEx(), для обеспечения обратной совместимости.
-
PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Основная функция интерпретации Python. Объект кода, связанный с кадром выполнения f, выполняется, интерпретируя байткод и выполняя вызовы по мере необходимости. Дополнительный параметр throwflag в основном можно игнорировать — если он истинный, то это приводит к немедленному сбрасыванию исключения; используется для методов
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 CO_FUTURE_DIVISION -
Этот бит может быть установлен в flags для того, чтобы оператор деления
/интерпретировался как «истинное деление» в соответствии с PEP 238.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/veryhigh.html