在處理C++項目時,我一直在尋找第三方庫來尋找不是我的核心業務的東西。我找到了一個非常好的庫,完成所需的任務,但它是用Python編寫的。我決定嘗試用C++嵌入Python代碼,使用Boost.Python庫。嵌入在CPP中的Python:如何將數據返回給CPP
的C++代碼看起來是這樣的:
#include <string>
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int main(int, char **)
{
Py_Initialize();
try
{
object module((handle<>(borrowed(PyImport_AddModule("__main__")))));
object name_space = module.attr("__dict__");
object ignored = exec("from myModule import MyFunc\n"
"MyFunc(\"some_arg\")\n",
name_space);
std::string res = extract<std::string>(name_space["result"]);
}
catch (error_already_set)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
A(非常)簡化了Python代碼的版本是這樣的:
import thirdparty
def MyFunc(some_arg):
result = thirdparty.go()
print result
現在的問題是這樣的: 'MYFUNC'執行得很好,我可以看到'結果'的打印。 我不能做的是從C++代碼中讀取'結果'。提取命令從不會在任何名稱空間中找到「結果」。 我試着定義'結果'作爲一個全球性的,我甚至嘗試返回一個元組,但我無法得到它的工作。
比我更全面的答案,從(我想)研究員父:) nosklo,我建議您用PyRun_String示例擴展您的答案;它允許更多的靈活性。 – tzot 2008-10-19 08:58:02