File: exec.qbk

package info (click to toggle)
boost1.83 1.83.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 545,632 kB
  • sloc: cpp: 3,857,086; xml: 125,552; ansic: 34,414; python: 25,887; asm: 5,276; sh: 4,799; ada: 1,681; makefile: 1,629; perl: 1,212; pascal: 1,139; sql: 810; yacc: 478; ruby: 102; lisp: 24; csh: 6
file content (84 lines) | stat: -rw-r--r-- 2,312 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[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]