python/doc/reference/exec.qbk
2015-08-04 15:34:56 -04:00

85 lines
2.3 KiB
Plaintext

[section boost/python/exec.hpp]
[section Introduction]
Exposes a mechanism for embedding the python interpreter into C++ code.
[endsect]
[section Function `eval`]
``
object eval(str expression,
object globals = object(),
object locals = object());
``
[variablelist
[[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.]]
]
[endsect]
[section Function `exec`]
``
object exec(str code,
object globals = object(),
object locals = object());
``
[variablelist
[[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. ]]
]
[endsect]
[section Function `exec_file`]
``
object exec_file(str filename,
object globals = object(),
object locals = object());
``
[variablelist
[[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. ]]
]
[endsect]
[section Examples]
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);
// ...
}
``
[endsect]
[endsect]