...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Table of Contents
Exposes a mechanism for embedding the python interpreter into C++ code.
object eval(str expression, object globals = object(), object locals = object());
Evaluate Python expression from expression in the context specified by the dictionaries globals and locals.
An instance of object which holds the value of the expression.
object exec(str code, object globals = object(), object locals = object());
Execute Python source code from code in the context specified by the dictionaries globals and locals.
An instance of object which holds the result of executing the code.
object exec_file(str filename, object globals = object(), object locals = object());
Execute Python source code from the file named by filename in the context specified by the dictionaries globals and locals.
An instance of object which holds the result of executing the code.
The following example demonstrates the use of import and exec to define a function in python, and later call it from within C++.
#include <iostream> #include <string> using namespace boost::python; void greet() { // Retrieve the main module. object main = import("__main__"); // Retrieve the main module's namespace object global(main.attr("__dict__")); // Define greet function in Python. object result = exec( "def greet(): \n" " return 'Hello from Python!' \n", global, global); // Create a reference to it. object greet = global["greet"]; // Call it. std::string message = extract<std::string>(greet()); std::cout << message << std::endl; }
Instead of embedding the python script into a string, we could also store it in an a file...
def greet(): return 'Hello from Python!'
... and execute that instead.
// ... // Load the greet function from a file. object result = exec_file(script, global, global); // ... }