mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-22 20:40:18 +00:00
1.9 KiB
1.9 KiB
| icon | label | order |
|---|---|---|
| dot | Execute Python code | 93 |
Simple execution
Once you have a VM instance, you can execute python code by calling exec method.
PyObject* exec(Str source, Str filename, CompileMode mode, PyObject* _module=nullptr)
source, the python source code to be executedfilename, the filename of the source code. This is used for error reportingmode, the compile mode. See below for detailsmodule, the module where the code will be executed. Ifnullptr, the code will be executed in the__main__module
exec handles possible exceptions and returns a PyObject*.
If the execution is not successful, e.g. a syntax error or a runtime exception,
the return value will be nullptr.
Compile mode
The mode parameter controls how the source code is compiled. There are 4 possible values:
EXEC_MODE, this is the default mode. Just do normal execution.EVAL_MODE, this mode is used for evaluating a single expression. Thesourceshould be a single expression. It cannot contain any statements.REPL_MODE, this mode is used for REPL. It is similar toEXEC_MODE, but generatesPRINT_EXPRopcode when necessary.CELL_MODE, this mode is designed for Jupyter like execution.JSON_MODE, this mode is used for JSON parsing. It is similar toEVAL_MODE, but uses a lexing rule designed for JSON.
Fine-grained execution
In some cases, you may want to execute python code in a more fine-grained way. These two methods are provided for this purpose:
CodeObject_ compile(Str source, Str filename, CompileMode mode, bool unknown_global_scope)PyObject* _exec(CodeObject_ co, PyObject* _module)
compile compiles the source code into a CodeObject_ instance.
_exec executes the CodeObject_ instance. Leave unknown_global_scope to false if you are not sure.
It does not handle exceptions, you need to use try..catch manually.