在C ++中嵌入Python:跨执行的解释器持久性

时间:2017-02-08 09:50:31

标签: python c++ c

使用Py_Initialize(),我们可以在C ++程序中启动python解释器。 但是由于函数不返回任何内容,我们不能在不同的程序中使用相同的解释器。 有没有办法在一个C ++程序中调用Py_Initialize(),使解释器持久化并在不同的C ++程序中使用它(不再调用Py_Initialize())?

编辑:更具体一点,是否有办法可以获取python解释器的实例并将其作为参数传递给另一个执行并使用它来运行python脚本。

1 个答案:

答案 0 :(得分:1)

没有。 CPython解释器本身并不像那样工作。没有明确的解释器对象,而是具有有状态API的浮动全局变量集。更糟糕的是,Python代码可以加载任意其他库,其状态肯定不会被持久化(通常)。

你可以做的是挑选现有的变量。这有时可以带给你一些接近的地方。这不是托管问题,而是Python问题。但是,当然,您可以确保托管Python的C代码确保在“真正的”Python代码执行完毕后执行序列化步骤。像How can I save all the variables in the current python session?之类的东西可能是一个起点。