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 <Python.h>,记得设置相应的头文件路径
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();
}


打印结果:

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值