PrevUpHomeNext

Chapter 6. Embedding

Table of Contents

boost/python/exec.hpp
Introduction
Function eval
Function exec
Function exec_file
Examples
boost/python/import.hpp
Introduction
Function import
Examples

Exposes a mechanism for embedding the python interpreter into C++ code.

object eval(str expression,
            object globals = object(),
            object locals = object());

Effects

Evaluate Python expression from expression in the context specified by the dictionaries globals and locals.

Returns

An instance of object which holds the value of the expression.

object exec(str code,
            object globals = object(),
            object locals = object());

Effects

Execute Python source code from code in the context specified by the dictionaries globals and locals.

Returns

An instance of object which holds the result of executing the code.

object exec_file(str filename,
                 object globals = object(),
                 object locals = object());

Effects

Execute Python source code from the file named by filename in the context specified by the dictionaries globals and locals.

Returns

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);
  // ...
}

PrevUpHomeNext