mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-24 05:20:17 +00:00
1.8 KiB
1.8 KiB
| icon | label | order |
|---|---|---|
| dot | Execute Python code | 93 |
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 to 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_EXPRbytecode for global expressions.JSON_MODE, this mode is used for JSON parsing. It is similar toEVAL_MODE, but uses a lexing rule designed for JSON. For example,truewill be parsed asTrue.
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.
It does not handle exceptions, so you may need to use try..catch manually.