1、C++端调python代码的方法
main.cpp如下:
#include <Python.h>
#include <iostream>
int main() {
Py_Initialize(); // 初始化Python解释器
// 运行一个简单的Python语句
PyRun_SimpleString("print('Hello from Python!')");
// 调用自定义Python脚本
PyObject* pName = PyUnicode_DecodeFSDefault("test_script");
PyObject* pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != nullptr) {
PyObject* pFunc = PyObject_GetAttrString(pModule, "add");
if (pFunc && PyCallable_Check(pFunc)) {
PyObject* pArgs = PyTuple_Pack(2, PyLong_FromLong(3), PyLong_FromLong(5));
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != nullptr) {
std::cout << "Result of add: " << PyLong_AsLong(pValue) << std::endl;
Py_DECREF(pValue);
}
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
} else {
PyErr_Print();
}
Py_Finalize(); // 关闭Python解释器
getchar();
return 0;
}
test_script.py代码如下:
def add(a, b):
return a + b
CMakeList.txt如下:
project(demo_cpp_call_python)
set(Python3_ROOT_DIR "C:/Users/AppData/Local/Programs/Python/") # 这里填你的Python安装目录
set(Python3_INCLUDE_DIR "C:/Users/AppData/Local/Programs/Python/Python39/include")
set(Python3_LIBRARY "C:/Users/AppData/Local/Programs/Python/Python39/libs/python39.lib")
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
add_executable(demo_cpp_call_python main.cpp)
target_include_directories(demo_cpp_call_python PRIVATE ${Python3_INCLUDE_DIRS})
target_link_libraries(demo_cpp_call_python PRIVATE ${Python3_LIBRARIES})
执行结果如下: