Accessing the Python interpreter from C++.
The TPython class allows for access to python objects from Cling. The current functionality is only basic: ROOT objects and builtin types can freely cross the boundary between the two interpreters, python objects can be instantiated and their methods can be called. All other cross-coding is based on strings that are run on the python interpreter.
Examples:
And with a python file MyPyClass.py
like this:
one can load a python module, and use the class. Casts are necessary as the type information can not be otherwise derived.
It is possible to switch between interpreters by calling TPython::Prompt()
on the Cling side, while returning with ^D
(EOF). State is preserved between successive switches.
The API part provides (direct) C++ access to the bindings functionality of PyROOT. It allows verifying that you deal with a PyROOT python object in the first place (CPPInstance_Check for CPPInstance and any derived types, as well as CPPInstance_CheckExact for CPPInstance's only); and it allows conversions of void*
to an CPPInstance and vice versa.
Static Public Member Functions | |
static const TPyReturn | Eval (const char *expr) R__DEPRECATED(6 |
Evaluate a python expression (e.g. | |
static Bool_t | Exec (const char *cmd, std::any *result=nullptr, std::string const &resultName="_anyresult") |
Executes a Python command within the current Python environment. | |
static void | ExecScript (const char *name, int argc=0, const char **argv=nullptr) |
Execute a python stand-alone script, with argv CLI arguments. | |
static Bool_t | Import (const char *name) |
Import the named python module and create Cling equivalents for its classes and methods. | |
static void | LoadMacro (const char *name) |
Execute the give python script as if it were a macro (effectively an execfile in main), and create Cling equivalents for any newly available python classes. | |
Static Private Member Functions | |
static Bool_t | Initialize () |
Initialization method: setup the python interpreter and load the ROOT module. | |
#include <TPython.h>
|
static |
Evaluate a python expression (e.g.
"ROOT.TBrowser()").
Caution: do not hold on to the return value: either store it in a builtin type (implicit casting will work), or in a pointer to a ROOT object (explicit casting to a void* is required).
Definition at line 439 of file TPython.cxx.
|
static |
Executes a Python command within the current Python environment.
This function initializes the Python environment if it is not already initialized. It then executes the specified Python command string using the Python C API.
In the Python command, you can change the value of a special TPyResult object returned by TPyBuffer(). If the optional result parameter is non-zero, the result parameter will be swapped with a std::any variable on the Python side. You need to define this variable yourself, and it needs to be of type std::any and its name needs to be "_anyresult"
by default. Like this, you can pass information from Python back to C++.
cmd | The Python command to be executed as a string. |
result | Optional pointer to a std::any object that can be used to transfer results from Python to C++. |
resultName | Name of the Python variable that is swapped over to the std::any result. The default value is "_anyresult" . |
true
if the command was successfully executed, otherwise returns false
. Definition at line 403 of file TPython.cxx.
|
static |
Execute a python stand-alone script, with argv CLI arguments.
example of use: const char* argv[] = { "1", "2", "3" }; TPython::ExecScript( "test.py", sizeof(argv)/sizeof(argv[0]), argv );
Definition at line 361 of file TPython.cxx.
|
static |
Import the named python module and create Cling equivalents for its classes and methods.
Definition at line 233 of file TPython.cxx.
|
staticprivate |
Initialization method: setup the python interpreter and load the ROOT module.
Definition at line 147 of file TPython.cxx.
|
static |
Execute the give python script as if it were a macro (effectively an execfile in main), and create Cling equivalents for any newly available python classes.
Definition at line 291 of file TPython.cxx.