【发布时间】:2015-07-20 21:52:55
【问题描述】:
我有一个关于 boost-python 的问题。基本上我想执行一个特定的 python 函数,该函数存储在带有 boost-python 的 std::string 中。文档中有一个如何实现此目的的示例:Boost python doc。
所以我正在做的是(C++ 代码):
using namespace boost::python;
Py_Initialize();
// 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(string_with_python_code.c_str(), global, global);
object greet = global["greet"];
//calling greet() function
greet();
Py_Finalize();
但是,这也会执行不在函数中而是在全局范围内的代码(与文档中 exec() 语句上方的语句相反:“[only] Define Python 中的 greet 函数”)。
例如,如果我像这样在 string_with_python_code 中设置 python 代码:
string_with_python_code = "print 'Hello global world!' \n"
" \n"
"def greet(): \n"
" print 'Hello local world!' \n"
" return \n";
然后是句子“Hello global world!”也被打印出来(在“Hello local world!”被打印出来之前)。
但是,我希望完成的是只有函数 greet() 被执行。我怎样才能做到这一点?
【问题讨论】:
标签: c++ boost-python