我想从我的c ++程序中调用python脚本文件。
我不确定我要分发的人是否会安装python。
基本上我正在寻找一个我可以使用的.lib文件,它具有类似Apache的分发许可证。
答案 0 :(得分:63)
我想从我的c ++程序中调用python脚本文件。
这意味着您希望在您的C ++应用程序中嵌入Python。如Embedding Python in Another Application中所述:
嵌入Python类似于 扩展它,但不完全。该 不同的是,当你延长 Python,主要程序 应用程序仍然是Python 翻译,如果你嵌入 Python,主程序可能有 与Python无关 - 相反, 应用程序的某些部分 偶尔会调用Python 解释器运行一些Python代码。
我建议你先通过Embedding Python in Another Application。然后参考以下示例
答案 1 :(得分:29)
Boost有一个python接口库,可以帮助你。
答案 2 :(得分:3)
在C ++应用程序中嵌入Python解释器将允许您使用应用程序运行Python脚本运行Python程序。它还使这些脚本更容易在您的应用程序中调用C ++函数。如果这是你想要的,那么前面提到的Boost库可能就是你想要更容易创建链接。在过去,我使用SWIG生成C ++代码的Python接口。从您的问题中不清楚您是否希望Python脚本调用您的C ++程序,或者您是否只是想让C ++调用Python。
许多Python函数都使用未内置于Python解释器中的模块。如果您的Python脚本调用这些函数,那么您需要让您的用户安装Python或在您的应用程序中包含python运行时文件。它取决于您在Python脚本中导入的模块。
答案 3 :(得分:2)
Boost可能是最好的选择,但是如果你想要一些更独立的东西,并且如果这是用于Windows(这似乎是可行的,因为他们是最不可能安装Python的人),那么你可以使用py2exe创建一个DLL,其入口点适合COM对象。然后,您可以通过COM与库进行交互。 (显然,这对于跨平台解决方案来说根本不是很有用)。
答案 4 :(得分:2)
有趣的是,还没有人提到pybind11。从他们的文档中:
pybind11是一个轻量级的仅包含头文件的库,它公开了C ++类型 反之亦然,主要是创建现有的Python绑定 C ++代码。它的目标和语法类似于优秀 David Abrahams的Boost.Python库:最小化样板代码 在传统扩展模块中,通过使用 编译时自省。 [...]自创建以来,该库 在很多方面都超越了Boost.Python, 在许多常见情况下,绑定代码更简单。
具体来说,调用Python函数(称为嵌入)就这么简单(取自documentation):
#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;
int main() {
py::scoped_interpreter guard{}; // start the interpreter and keep it alive
py::print("Hello, World!"); // use the Python API
}
答案 5 :(得分:1)
使用系统调用从C ++运行python脚本
#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result;
}