gpt4 book ai didi

c++ - 使用 boost-python 执行 python 函数(不是全局范围语句)

转载 作者:太空狗 更新时间:2023-10-29 21:17:49 25 4
gpt4 key购买 nike

我有一个关于 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()。我怎样才能做到这一点?

最佳答案

Python 函数定义是 Python 代码的执行。 Python 模块导入也是如此:导入模块会导致任意 Python 语句运行。

不在函数定义之外运行代码的方法是不将函数定义之外的代码传递给execexec 将完全按照您的指示执行,一点也不差。

关于c++ - 使用 boost-python 执行 python 函数(不是全局范围语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com