Очень высокоуровневый слой¶
Функции, описанные в этой главе, позволят вам выполнить исходный код 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()
). Если filenameNULL
, эта функция использует"???"
в качестве имени файла.
-
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 имеет значение true, файл закрывается перед возвращением 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)¶ - 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.
Выполнить исходный Python код из str в контексте, определенном объектами globals и locals с флагами компилятора, определенными 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 значение0
, а для flags значение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()
, но исходный Python код считывается из fp вместо строки в памяти. filename должно быть именем файла, он декодируется из кодировки файловой системы (sys.getfilesystemencoding()
). Если closeit имеет значение true, файл закрывается перед возвращениемPyRun_FileExFlags()
.
-
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_CompileStringObject
(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)¶ - Return value: New reference.
Выполнить синтаксический анализ и компиляцию исходного код Python в str, возвращая результирующий кодовый объект. Начальный токен задается 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.
-
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.
Вычислить предварительно скомпилированный объект кода с учетом конкретной среды для его оценки. Эта среда состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значения по умолчанию для только ключевых аргументов и кортежа замыкания ячеек.
-
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. Объект кода, связанный с фреймом 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