VS Code实现在C++程序里面调用python代码
小白第一次尝试终于用了一天的时间解决了,喜极而泣!
记录下来,希望能够帮助需要的人。
1、创建一个文件夹,在文件夹里面新建两个文件
一个是C++文件test.cpp,一个是python 文件forcpp.py。
test.cpp
#include <Python.h>
int main(int argc, char *argv[]) {
Py_Initialize();
//判断初始化是否成功
if(!Py_IsInitialized())
{
printf("Python init failed!\n");
return -1;
}
PyRun_SimpleString("import sys");
// PyRun_SimpleString("sys.path.append('./')");//若python文件在c++工程下
// 添加python文件所在的位置
PyRun_SimpleString("sys.path.append('/home/user/Documents/project/helloword')");
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
//导入python文件
pModule = PyImport_ImportModule("forcpp");
if (!pModule) {
printf("Can not open python file!\n");
return -1;
}
pFunc = PyObject_GetAttrString(pModule, "printHello");
//PyEval_Ca llObject(pFunc, NULL);
PyObject_CallObject(pFunc, NULL);
Py_DECREF(pFunc);
Py_DECREF(pModule);
Py_Finalize();
return 0;
}
forcpp.py
import sys
def printHello():
print(sys.version)
print("hello world!")
(以上两个例程是在网上找的测试程序,如有侵权请告知。)
2、将程序编译成.exe文件,然后进行debug。这里面编译有两种方式,
一种是用CMakeLists.txt 文件编译;
另一种是 选择 终端->配置任务,选择g++生成活动文件,会生成tasks.json 文件,在tasks.json 文件里面定义编译任务,在.cpp文件中按键ctrl+shift+b,如果配置正确的话会看到生成的可执行文件。具体配置在下一篇再介绍,这里面先介绍第一种方法。
3、建立CMakeLists.txt 文件,内容
cmake_minimum_required(VERSION 2.8)
project(helloword) #工程文件名
include_directories(
/home/user/anaconda3/include/python3.7m
) #是包含Python.h的文件夹路径,否则报错找不到Python.h
#设置debug 模式,否则不能debug
set (CMAKE_BUILD_TYPE DEBUG)
add_executable(test
test.cpp) #生成可执行文件test.exe
target_link_libraries(test
/home/user/anaconda3/lib/libpython3.7m.so
) #链接需要的Python库
4、将以上文件都保存好,在工程文件夹终端执行
mkdir build
cd build
cmake ..
make
在build文件夹中会生成test.exe文件
5、debug C++文件需要设置launch.json文件。
在菜单栏选择 运行->添加配置,选择C++(GDB/LLDB),就会自动生成launch.json文件
我们需要改一下默认配置
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/test", #这里面改成刚才生成test.exe文件目录,最前面的意思是工作空间文件夹
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}", #这里面改成工作空间文件夹
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
保存之后,可以在.cpp文件中,按左侧调试按钮启动调试,如图所示就大功告成了!