Слой очень высокого уровня¶
Функции в этой главе позволят вам выполнить исходный код Python, заданный в файле или буфере, но они не позволят вам более детально взаимодействовать с интерпретатором.
Некоторые из этих функций принимают в качестве параметра начальный символ из грамматики. Доступными начальными символами являются Py_eval_input
, Py_file_input
и Py_single_input
. Они описаны после функций, которые принимают их в качестве параметров.
Обратите внимание, что некоторые из этих функций принимают параметры FILE*. Один конкретный вопрос, требующий осторожного обращения, заключается в том, что структура FILE
для различных библиотек C может быть различной и несовместимой. В Windows (по крайней мере) динамически подключаемые расширения могут использовать разные библиотеки, поэтому необходимо следить за тем, чтобы параметры FILE* передавались в эти функции только в том случае, если есть уверенность, что они были созданы той же библиотекой, которую использует среда выполнения Python.
-
int
Py_Main
(int argc, wchar_t **argv)¶ - Part of the Stable ABI.
Основная программа для стандартного интерпретатора. Она доступна для программ, встраивающих Python. Параметры argc и argv должны быть подготовлены точно так же, как те, которые передаются в функцию
main()
программы на языке Си (преобразованную в wchar_t в соответствии с локалью пользователя). Важно отметить, что список аргументов может быть изменен (но содержимое строк, на которые указывает список аргументов, не изменяется). Возвращаемое значение будет0
, если интерпретатор завершается нормально (т.е. без исключения),1
, если интерпретатор завершается из-за исключения, или2
, если список параметров не представляет собой допустимую командную строку Python.Обратите внимание, что если возникнет необработанная в противном случае ошибка
SystemExit
, эта функция не вернет1
, а завершит процесс, если толькоPy_InspectFlag
не установлен.
-
int
Py_BytesMain
(int argc, char **argv)¶ - Part of the Stable 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()
. filename декодируется из кодировки файловой системы (sys.getfilesystemencoding()
). Если filename равноNULL
, эта функция использует"???"
в качестве имени файла. Если closeit равно true, файл закрывается до возвратаPyRun_SimpleFileExFlags()
.
-
int
PyRun_SimpleString
(const char *command)¶ Это упрощенный интерфейс к
PyRun_SimpleStringFlags()
ниже, оставляя аргументPyCompilerFlags
* установленным вNULL
.
-
int
PyRun_SimpleStringFlags
(const char *command, PyCompilerFlags *flags)¶ Выполняет исходный код Python из команды в модуле
__main__
в соответствии с аргументом флаги. Если__main__
еще не существует, он создается. Возвращает0
при успехе или-1
, если возникло исключение. Если возникла ошибка, нет способа получить информацию об исключении. Значение флагов см. ниже.Обратите внимание, что если возникнет необработанная в противном случае ошибка
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 окончанием строки.
-
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
. Имя filename расшифровывается из аргумента 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
. Имя filename декодируется из filesystem encoding and error handler. Возвращает0
при EOF или отрицательное число при неудаче.
-
int (*
PyOS_InputHook
)(void)¶ - Part of the Stable 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)¶ - Return value: New reference.
Это упрощенный интерфейс к
PyRun_StringFlags()
ниже, оставляя флаги установленными в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()
ниже, оставляя флаги установленными в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 должно быть именем файла, оно декодируется из filesystem encoding and error handler. Если closeit равен true, файл закрывается до возвратаPyRun_FileExFlags()
.
-
PyObject *
Py_CompileString
(const char *str, const char *filename, int start)¶ - Return value: New reference. Part of the Stable ABI.
Это упрощенный интерфейс к
Py_CompileStringFlags()
ниже, оставляя флаги установленными в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__
- истина),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 - это байтовая строка, декодированная из filesystem encoding and error handler.Добавлено в версии 3.2.
-
PyObject *
PyEval_EvalCode
(PyObject *co, PyObject *globals, PyObject *locals)¶ - Return value: New reference. Part of the Stable 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)¶ - Return value: New reference. Part of the Stable ABI.
Оценить предварительно скомпилированный объект кода, задав определенную среду для его оценки. Эта среда состоит из словаря глобальных переменных, объекта отображения локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, словаря значений по умолчанию для аргументов keyword-only и кортежа закрытия ячеек.
-
type
PyFrameObject
¶ - Part of the Limited API (as an opaque struct).
Структура C объектов, используемая для описания объектов кадра. Поля этого типа могут быть изменены в любое время.
-
PyObject *
PyEval_EvalFrame
(PyFrameObject *f)¶ - Return value: New reference. Part of the Stable ABI.
Оценить кадр выполнения. Это упрощенный интерфейс для
PyEval_EvalFrameEx()
, для обратной совместимости.
-
PyObject *
PyEval_EvalFrameEx
(PyFrameObject *f, int throwflag)¶ - Return value: New reference. Part of the Stable ABI.
Это основная, неприкрытая функция интерпретации 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
может модифицировать флаги.Когда
PyCompilerFlags *flags
становитсяNULL
,cf_flags
рассматривается как равное0
, и любая модификация, вызваннаяfrom __future__ import
, отбрасывается.-
int
cf_flags
¶ Флаги компилятора.
-
int
cf_feature_version
¶ cf_feature_version - это минорная версия Python. Она должна быть инициализирована в
PY_MINOR_VERSION
.По умолчанию поле игнорируется, оно используется тогда и только тогда, когда в cf_flags установлен флаг
PyCF_ONLY_AST
.
Изменено в версии 3.8: Добавлено поле cf_feature_version.
-
int