将Python嵌入到C++应用程序中

5

背景:

我们一直面临的问题是如何对市场数据应用程序进行单元测试。这些应用程序会观察从数据源检索到的数据并执行某些操作。有些难以触发的关键事件很少发生,测试人员很难验证我们的应用程序在所有情况下都能正确执行,因此我们必须依靠单元测试。

这些系统通常通过在事件发生时发出回调(进入我们的应用程序),然后我们的任务就是处理这些回调。

我设想的解决方案:

是否可以嵌入Python或扩展(不完全清楚),以便测试人员可以启动Python REPL并发出类似于回调的函数调用,然后由我们的C++类处理。在运行时对我们的对象进行某种形式的动态操作。

3个回答

7

我在我的项目中进行类似的操作,使用SWIG生成与C++代码相关部分的python绑定。然后我按照其他人的建议嵌入解释器,执行python代码(例如PyRun_SimpleString),可以访问C++代码。通常,我会使用类单例使得从python更容易地访问特定的C++对象。

值得一提的是,在swig python模块中有directors,它可以更直观地处理虚函数。根据你所做的工作不同,你可能会发现这些非常有帮助。


4
你想做的事情是可能的,但要做好并不容易。听起来你想嵌入(而不是扩展)Python。这两个主题都在教程here中有涉及。
从C++类到Python类的映射需要相当多的工作,并且有许多微妙的问题可能会出现,特别是内存泄漏和多线程(如果你现有的代码是多线程的)。然而,如果只是用于测试情况,并且稳定性不是关键,则可能会减轻一些问题。

3
是的,这是可能的。请看这里了解操作方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接