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

Posted

技术标签:

【中文标题】在 C++ 中嵌入 Python:解释器在执行过程中的持久性【英文标题】:Embeding Python in C++: persistence of interpreter across execution 【发布时间】:2017-02-08 09:50:31 【问题描述】:

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

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

【问题讨论】:

如果是不同的程序,根据定义,它不是同一个解释器实例。 没有“C/C++ 程序”之类的东西。确定您使用的语言。如果是C,则去掉C++标签。 【参考方案1】:

没有。 CPython 解释器本身并不是这样工作的。没有不同的解释器对象,而是一组具有状态 API 的浮动全局变量。更糟糕的是,Python 代码可以加载任意其他库,其状态绝对不能持久化(通常)。

你可以做的是腌制现有的变量。这有时可以让你靠近某个地方。这实际上不是托管问题,而是 Python 问题。当然,您可以确保托管 Python 的 C 代码确保在“真正的”Python 代码完成执行后执行序列化步骤。 How can I save all the variables in the current python session? 之类的东西可能是一个起点。

【讨论】:

以上是关于在 C++ 中嵌入 Python:解释器在执行过程中的持久性的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 和 C++ 中嵌入式 python 的子解释器

从 C++ 嵌入式解释器捕获 python 窗口输出

使用 c++ 对象的全局实例扩展嵌入式 python 解释器

python - C++ 嵌入式解释器和对象

如果我想将 Python 嵌入到 C++ 程序中,我应该在我的程序文件夹中放啥?

Embedded Boost::Python 和 C++:并行运行