栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++调用Python

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++调用Python

项目场景:

目前正在用c++写一款后台软件,涉及到对某个路径下所有的文件夹信息进行获取,采用C/C++的方式非常麻烦,偶然间看到C++可调用Python的接口来执行,因此笔者也决定尝试一番。


环境安装

1:安装python环境,我这边下载最新版3.10.5(注意要对应mingw位数,比如mingw32就下载python32位)。对安装包直接安装既可,记得勾选设置环境变量。
https://www.python.org/downloads/release/python-3105/
2:找到python安装目录,与项目相关的文件有libs/*lib,include/Python.h等,后续会用到

C++设置

1:头文件引用 #include ,记得设置相应的头文件路径
2:库的引用 LIBS += -Lc:/software/python3/app/libs/ -lpython310 -lpython3
3:拷贝python3.dll python310.dll,到对应的exe执行目录下。否则会提示找不到这些文件

Python 接口代码
import sys
import os
def getDir(path):
    for root, dirs, files in os.walk(path, topdown=True):
	print("当前目录路径:", root)
    return

C++接口代码:
int fPython_vInit()
{
    int ret = 0;
    Py_Initialize();
    // 初始化python系统文件路径,保证可以访问到 .py文件
    ret = PyRun_SimpleString("import sys");
    if (ret != 0){
        PR_DEBUG("import sys error");
        return ret;
    }
    ret = PyRun_SimpleString("import os");
    if (ret != 0){
        PR_DEBUG("import os error");
        return ret;
    }
    // 已当前cpp文件为索引,索引到py文件
    ret = PyRun_SimpleString("sys.path.append('./py/')");
    if (ret != 0){
        PR_DEBUG("import error");
        return ret;
    }
    return ret;
}

void fPython_vDeInit()
{
    Py_Finalize();
}

// 获取路径下所有的文件夹
void fPython_nFindDir(char *path)
{
	fPython_vInit();
    //初始化使用的变量
    PyObject* pModule = NULL;
    PyObject* pFunc = NULL;
    PyObject* pName = NULL;

    pModule = PyImport_ImportModule("py");
    if( pModule == NULL ){
        PR_DEBUG("not found py.");
		return;
	}
    //4、调用函数
    pFunc = PyObject_GetAttrString(pModule, "getDir");
    if( !pFunc || !PyCallable_Check(pFunc)){
        PR_DEBUG("not found func.");
        return;
    }
	PyObject_CallObject(pFunc,NULL);
    fPython_vDeInit();
}


打印结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号