cpp swig to run into python

编辑

通过SWIG在Py里调用cpp的方法

通过Python.h接口, 在cpp里使用python脚本

经常会做改动的业务逻辑在Py里做, cpp通过SWIG暴露出某些cpp内的对象和方法,给python做调用。 同时cpp内也会有CallNoRT来调用python脚本, 完成类似闭环的调用链。

SWIG的方法, 网上很多介绍。

cpp内CallNoRt调用Py的, 大概就是封装Python.h开发的一些接口, 调用时:

  ScriptManager::Instance()->CallNoRT("eplObserver.print_recv_data", dynamic_cast<TcpSocket*>(this));

Instance()的时候, 会先Py_Initialize() 产生一个py虚拟机,之后 PyString_FromString, PyImport_ImportModule 等, 同时自己封装一个 ProcessPythonException 用来处理Py的异常捕获,在ScriptManager.h 构造的时候将Python的sys.stdout和sys.stderr重定向到cpp的std::cout咯:

void PyStdOut(const char* p)
{
    std::cout<<p<<std::endl;
}

析构函数里, 回收py虚拟机不要忘记:

ScriptManager::~ScriptManager()
{
    Py_Finalize();
}

完, 代码在我的gitbub