C++ 프로젝트에서 작업하면서 제 핵심 비즈니스가 아닌 제 3 자 라이브러리를 찾고있었습니다. 필자는 실제로 필요한 라이브러리를 찾았지만 Python으로 작성되었습니다. Boost.Python 라이브러리를 사용하여 C++에 파이썬 코드를 삽입하는 실험을하기로 결정했습니다. 'Func라고'CPP에 임베드 된 Python : CPP로 데이터를 다시 가져 오는 방법
이import thirdparty
def MyFunc(some_arg):
result = thirdparty.go()
print result
이제 문제는 이것이다 :이처럼 보이는 파이썬 코드의
#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 (매우) 단순화 된 버전 :
는 C++ 코드는 다음과 같이 보입니다 잘 실행됩니다, 나는 '결과'의 프린트를 볼 수 있습니다. 내가 할 수없는 것은 C++ 코드에서 '결과'를 다시 읽는 것입니다. 추출 명령은 어떤 네임 스페이스에서도 '결과'를 찾지 않습니다. '결과'를 전역으로 정의하려고 시도했지만 튜플을 반환하려고 시도했지만 작업을 수행 할 수 없습니다.
훨씬 더 포괄적 인 답을 항목 할당을 지원하지 않습니다 'NoneType'개체 : nosklo를, I PyRun_String 예제를 사용하여 대답을 확장하는 것이 좋습니다. 더 많은 유연성을 허용합니다. – tzot
당신의'pArgs = PyTuple_New (0);'은 0이 아닌 1을 전달해야한다고 생각합니다. –