Слой очень высокого уровня¶
Функции, описанные в этой главе, позволят вам выполнить исходный код Python, указанный в файле или буфере, но они не позволят вам более подробно взаимодействовать с интерпретатором.
Некоторые из этих функций принимают в качестве параметра начальный символ из грамматики. Доступны следующие начальные символы : c:data:Py_eval_input, Py_file_input и Py_single_input. Они описаны ниже функций, которые принимают их в качестве параметров.
Также обратите внимание, что некоторые из этих функций принимают параметры FILE*. Одна из особых проблем, с которой необходимо обращаться осторожно, заключается в том, что структура FILE для разных библиотек C может отличаться и быть несовместимой. В Windows (по крайней мере) динамически подключаемые расширения могут фактически использовать разные библиотеки, поэтому следует позаботиться о том, чтобы : параметры c:expr:FILE* передавались этим функциям только в том случае, если точно известно, что они были созданы той же библиотекой, что и среда выполнения Python.
-
int Py_Main(int argc, wchar_t **argv)¶
- Part of the Стабильный ABI.
Основная программа для стандартного интерпретатора. Это доступно для программ, использующих Python. Параметры argc и argv должны быть подготовлены точно так же, как те, которые передаются в функцию программы на C
main()(преобразованы в wchar_t в соответствии с языковым стандартом пользователя). Важно отметить, что список аргументов может быть изменен (но содержимое строк, на которые указывает список аргументов, - нет). Возвращаемое значение будет0, если интерпретатор завершает работу в обычном режиме (т.е. без исключения),1, если интерпретатор завершает работу из-за исключения, или2, если список параметров не соответствует допустимой команде Python линия.Обратите внимание, что если в противном случае будет поднят необработанный
SystemExit, эта функция не вернет1, а завершит процесс до тех пор, пока значениеPy_InspectFlagне будет установлено.
-
int Py_BytesMain(int argc, char **argv)¶
- Part of the Стабильный ABI since version 3.8.
Аналогично
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(). имя файла декодируется из кодировки файловой системы (sys.getfilesystemencoding()). Если имя файла равноNULL, эта функция использует"???"в качестве имени файла. Если значение closeit равно true, файл будет закрыт до возврата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, а завершит процесс до тех пор, пока значение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(), приведенный ниже, оставляя флаги установленными наNULL.
-
int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)¶
Аналогично
PyRun_SimpleStringFlags(), но исходный код Python считывается из fp, а не из строки в памяти. filename должно быть именем файла, оно расшифровывается из filesystem encoding and error handler. Если значение closeit равно true, файл будет закрыт до возвратаPyRun_SimpleFileExFlags().Примечание
В Windows fp должен открываться в двоичном режиме (например,
fopen(filename, "rb")). В противном случае Python может неправильно обработать файл скрипта с LF-строкой, заканчивающейся LF-строкой.
-
int PyRun_InteractiveOne(FILE *fp, const char *filename)¶
Это упрощенный интерфейс для
PyRun_InteractiveOneFlags(), приведенный ниже, оставляя флаги установленными наNULL.
-
int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)¶
Считайте и выполняйте одну инструкцию из файла, связанного с интерактивным устройством, в соответствии с аргументом flags. Пользователю будет предложено ввести
sys.ps1иsys.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.ps1иsys.ps2. имя файла расшифровывается как filesystem encoding and error handler. Возвращает0в EOF или отрицательное число в случае сбоя.
-
int (*PyOS_InputHook)(void)¶
- Part of the Стабильный ABI.
Может указывать на функцию с прототипом
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().
-
PyObject *PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)¶
- Возвращаемое значение: Новая ссылка.
Это упрощенный интерфейс для
PyRun_StringFlags(), приведенный ниже, оставляя флаги установленными на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(), приведенный ниже, оставляя флаги установленными на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 должно быть именем файла, оно расшифровывается из filesystem encoding and error handler. Если значение closeit равно true, файл будет закрыт до того, как вернетсяPyRun_FileExFlags().
-
PyObject *Py_CompileString(const char *str, const char *filename, int start)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это упрощенный интерфейс для
Py_CompileStringFlags(), приведенный ниже, оставляя флаги установленными наNULL.
-
PyObject *Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)¶
- Возвращаемое значение: Новая ссылка.
Это упрощенный интерфейс для
Py_CompileStringExFlags(), приведенный ниже, с параметром оптимизировать, равным-1.
-
PyObject *Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)¶
- Возвращаемое значение: Новая ссылка.
Проанализируйте и скомпилируйте исходный код Python в формате str, вернув результирующий объект кода. Маркер start задается символом start; это может быть использовано для ограничения кода, который может быть скомпилирован и который должен быть: c:data:Py_eval_input,
Py_file_inputилиPy_single_input. Имя файла, указанное в filename, используется для создания объекта code и может отображаться в сообщениях об отслеживании или исключительных ситуацияхSyntaxError. Это возвращаетNULL, если код не может быть проанализирован или скомпилирован.Целое число optimize определяет уровень оптимизации компилятора; значение
-1определяет уровень оптимизации интерпретатора, указанный в параметрах-O. Явными уровнями являются0(оптимизация отсутствует;__debug__равно true),1( утверждения удалены,__debug__равно false) или2(строки документации также удалены).Добавлено в версии 3.4.
-
PyObject *Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)¶
- Возвращаемое значение: Новая ссылка.
Например
Py_CompileStringObject(), но имя файла - это строка байтов, декодированная из filesystem encoding and error handler.Добавлено в версии 3.2.
-
PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это упрощенный интерфейс для
PyEval_EvalCodeEx(), содержащий только объект code и глобальные и локальные переменные. Остальные аргументы имеют значение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)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Оцените предварительно скомпилированный объект кода с учетом конкретной среды для его оценки. Эта среда состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значений по умолчанию для аргументов keyword-only и замыкающего кортежа ячеек.
-
PyObject *PyEval_EvalFrame(PyFrameObject *f)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Вычислите фрейм выполнения. Это упрощенный интерфейс для
PyEval_EvalFrameEx(), для обеспечения обратной совместимости.
-
PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это основная, неприкрашенная функция интерпретации Python. Объект code, связанный с фреймом выполнения 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может изменять флаги.Всякий раз, когда
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 cf_flags¶