gpt4 book ai didi

python - 从 C++ 调用 Python 脚本并使用其输出

转载 作者:IT老高 更新时间:2023-10-28 20:34:12 24 4
gpt4 key购买 nike

我想从 C++ 调用 python 脚本,并希望将此脚本生成的输出 .csv 文件重新用于 C++。我在 main() 中试过这个:

std::string filename = "/home/abc/xyz/script.py";
std::string command = "python ";
command += filename;
system(command.c_str());

这确实调用并执行了 python 脚本。

正在执行 Python 中的 print 命令。调用脚本时,正在屏幕上打印内容。到目前为止,一切都很好。但是,它不会创建 .csv 文件(同一脚本的一部分)。

示例:我有一个 training.csv 文件,其中包含 100 个条目。我调用了 Python 脚本,对脚本进行了少量更改,因此 training.csv 文件现在应该只包含 50 个条目而不是 100 个条目。它被覆盖了。 但是,没有这样的发生的事情。脚本中的其他命令(print 等)运行良好。

training.csv 文件将使用 C++ 读取,通常使用 fstreamgetline

知道怎么做(使用 Linux)吗?

最佳答案

这是一个将 Python 模块的执行嵌入到 C++ 应用程序中的解决方案。这并不比通过系统调用 fork /执行你的 python 脚本更好或更糟,它只是一种不同的方式。是否最好取决于您的上下文和使用情况。

前段时间我编写了一种将 python 模块作为插件加载到 C++ 应用程序的方法,这里是 interesting part .

基本上,您需要 #include <Python.h> ,然后 Py_Initialize()启动你的 python 解释器。

然后你做import sys ,使用:PyRun_SimpleString("import sys"); , 你可以通过 PyRun_SimpleString('sys.path.append("path/to/my/module/")') 加载你的插件.

要在 C++ 和 Python 之间交换值,事情变得更加困难,您必须将所有 C++ 对象转换为 python 对象(在我的脚本中从第 69 行开始)。

然后您可以使用 PyObject_Call_Object(...) 调用您的函数,使用您创建的所有 python 对象作为参数。

您获得返回值,并在 C++ 对象中转换所有这些值。并且不要忘记所有这些中的内存管理!

要结束您的 python 解释器,只需调用 Py_Finalize() .

看起来确实比实际难,但你必须非常小心,因为它可能导致泄漏、安全问题等。

关于python - 从 C++ 调用 Python 脚本并使用其输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com