python - 从C++代码运行python脚本并在c++中使用pythons输出

标签 python c++ python-3.x

我有一个非常成熟的C++程序,可以完成它自己的工作,现在我们想为其添加一个附加功能,并且我们认为可以在Python中实现上述功能,然后使用C++的必需输入来调用该python何时需要将是最好的方法,因为它可以使它们分离,并允许我们从其他地方使用此python脚本。
第一步,我决定尝试制作一个测试程序,看看它如何工作,这似乎是一个好主意,因为我无法使其正常工作。
如何从C++运行单独的python?
我尝试了遵循this guide,虽然看起来不错,但它没有提供任何有关我应使用哪种编译器选项的信息?
我有两个文件cpp.cpp和python.py
这是我的cpp.cpp文件:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <ncurses.h>
#include <Python.h>

using namespace std;

int main() {

    std::cout << "C++ program started!\n";
    
    char filename[] = "python.py";
    FILE* fp;
    
    Py_Initialize();
    
    fp = _Py_fopen(filename, "r");
    PyRun_SimpleFile(fp, filename);
    
    Py_Finalize();
    
    std::cout << "C++ program is ending!\n";
    return 0;
}
而我的python文件只是两个printf行:
#print('External Python program running...')
#print('Hello World from Python program')
然后,我尝试对其进行编译,为它提供它似乎想要的所有包含,然后执行输出文件:
g++ -I . -I /home/ahomm/python3.6/Include -I /home/ahomm/python3.6/release cpp.cpp && ./a.out
这是我得到的输出:
/tmp/cccQsh1p.o: In function `main':
cpp.cpp:(.text+0x3f): undefined reference to `Py_Initialize'
cpp.cpp:(.text+0x52): undefined reference to `_Py_fopen'
cpp.cpp:(.text+0x70): undefined reference to `PyRun_SimpleFileExFlags'
cpp.cpp:(.text+0x75): undefined reference to `Py_Finalize'
collect2: error: ld returned 1 exit status
我想念什么?只是一点点或完全错误?
cpp和py文件位于同一目录中。
然后我如何在C++中读取python的输出?甚至还没有做到...

最佳答案

您必须将代码链接到libpython3.x.a / python3.x.lib(x-您使用的python版本)。链接哪个文件:*。a或* .lib取决于您的操作系统。这些文件在python发行版中可用。
这是一个适用于我的带有cmake的代码:

cmake_minimum_required(VERSION 2.8.9)
project (embpy)
add_executable(embpy embpy.cpp)
target_include_directories(embpy PRIVATE /path-to-python/Python38/include/python3.8)
target_link_libraries(embpy /path-to-python/Python38/lib/libpython3.8.a)
embpy.cpp与您的相同

关于python - 从C++代码运行python脚本并在c++中使用pythons输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64023033/

相关文章:

python - 如何使用 Tensorflow 模型进行预测?

python-3.x - 为什么在 python 中允许 for else

python - csh 标准输入到 Python 标准输入?

c++ - 如何阻止和唤醒 boost 线程?

python - 使用 Python 调整 Gnome

C++ 保存大数组的最佳方法

c++ - 获取 WSA 错误代码的格式化消息

python - 如何实时改变音量

python - imoporting GDAL : ImportError, 库未加载时出现问题,找不到图像

python - 参数必须是字节或unicode,得到 '_Element'