首页 > 其他分享 >PyImport_ImportModule总是返回 NULL或者空调用失败pModule为空pFunc为空

PyImport_ImportModule总是返回 NULL或者空调用失败pModule为空pFunc为空

时间:2024-10-29 23:21:04浏览次数:9  
标签:调用 pFunc Python ImportModule module 为空 path pModule

问题1 pModule为空

c++调用Python时,要调用Python自定义函数,但是在调用 PyImport_ImportModule时,总是返回空。一直调用不成功,明明我已经通过pyList_append(syspath,目录路径)。但是就是找不到。正常用cmd脚本也能正常运行。

解决方案

// 初始化Python解释器
Py_Initialize();
// 添加包含自定义Python模块的目录到sys.path
std::string module_path = “/path/to/your/module”; // 替换为你的模块目录
std::string command = “import sys\nsys.path.append(’” + module_path + “’)”;
*PyRun_SimpleString(command.c_str()); // 导入Python模块 **
PyObject
pModule = PyImport_ImportModule(“your_module_name”);

通过上面函数PyRun_SimpleString导入,而不是pyList_append函数导入。就能生效了。
如果是当前工作目录则添加这句:
PyRun_SimpleString(“sys.path.append(os.getcwd())”);

这里还有可能是依赖模块不存在,也会返回空。但是如果用命令行能正常调用。基本就排除import模块缺失的问题。

在这里插入图片描述

在这里插入图片描述

问题2 pFunc为空

pModule不为空了,pFunc又为空。

解决方案

一般可以在py文件自定义函数中打印几句话,如果有打印第一句话,说明进入了函数,如果一句都没有打印,很可能是函数输入的数量不对,比如要求输入三个参数,只传了两个,这时也会返回空。

下一个问题将解决c++多线程调用Python时,崩溃的问题…

编辑:myhappyandy

标签:调用,pFunc,Python,ImportModule,module,为空,path,pModule
From: https://blog.csdn.net/myhappyandy/article/details/143352240

相关文章

  • SqlSugar 达梦数据库大数据量,长字符串添加,数据库为空
    SqlSugar实体添加数据时,发现字符串超过某个长度,在数据库中就空白,插入失败,原因如下:达梦Clob、Text类型用法版本需升级到5.1.4.92及以上版本//需在长字符串的属性中加入以下[SugarColumn(SqlParameterDbType=typeof(NClobPropertyConvert))]publicstringName{get;......
  • PbootCMS登录页面无法正常加载,显示为空白页或错误信息怎么办
    问题描述:登录页面无法正常加载,显示为空白页或错误信息。解决方案:检查Web服务器配置:确保Web服务器(如Apache、Nginx)配置正确,特别是虚拟主机配置。检查PHP配置:确保PHP配置正确,特别是php.ini文件中的设置。检查文件权限:确保PBootCMS相关目录和文件的权限设置正确。检查PHP错误......
  • 【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有
    【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”零、报错在使用DiskGenius对磁盘分区进行调整时,DiskGenius检查出磁盘报错,报错信息:文件使用的簇被标记为空闲或与其它文件有交叉,本文介绍如何解决此错误。注意:在操作磁盘之前请把重要数......
  • 新建的SpringBoot项目结构为空的可能问题与解决方案
    问题:如下图,创建一个名为springboot_demo05的SpringBoot项目的时候,发现创建的项目结构为空,没有下一级目录。但是在新窗口新建一个项目的时候没有这个问题。打开Maven工具发现也没有关联Maven依赖模型 原因排查:1.检查项目模板与创建流程是否正确:首先确定项目创建的模板和......
  • 查询结果为空时不显示报表内容
    1.1说明本文介绍了如何在帆软报表中处理查询结果为空的情况,提供了两种解决方案:通过设置条件属性使空数据行高度为0,以及添加加载结束事件用JavaScript隐藏表格。这两种方法分别适用于PC端和移动端。2.1准备数据新建普通报表,新建数据库查询ds1,SQL查询语句为:SELECT*FROM销......
  • 支持 enum 类型的字段允许为空插入数据库
    支持 enum 类型的字段允许为空插入数据库,我们需要对现有代码进行一些修改。具体来说,我们需要在处理每一行数据时判断每个字段的类型,并在插入时正确处理 NULL 值。以下是修改后的代码示例://备份数据记录$result=Db::query("SELECT*FROM`{$table}`LIMIT{$start},100......
  • git eslint扩展,解决git提交因为空格差异而报错
    项目场景:在前端项目开发中,经常会使用eslint,这个方法的好处就是严格要求代码格式。让代码更为严谨。问题描述以为eslint格式过于严谨,在git提交的时候,经常会因为一个多了一个空格导致代码提交失败。原因分析:eslint严格要求代码风格,导致稍微有一点不一致,就会报错,是git代码......
  • java 如何实现判断一个对象所有的属性是否为空
     能适配所有类型的:Personperson=newPerson();person.setId(0);//---truePersonperson=null;//---truePersonperson=newPerson();person.setName("xxx");//---falsePersonperson=newPers......
  • ORA-01440: column to be modified must be empty (修改列类型时报错:要修改的列必须为
    创建新列:在表中添加一个新的列,然后将数据迁移到新列,最后删除旧列并重命名新列。ALTERTABLE"MESDB"."NC_WORKORDER"ADD("RECEIPT_QUANTITY_NEW"NUMBER(10,6));​--将数据迁移到新列UPDATE"MESDB"."NC_WORKORDER"SET"RECEIPT_QUANTITY_NEW"="RE......
  • 能否判断自定义变量是否为空?
    不同的编程语言有不同的方式来判断一个变量是否为空。下面列出了一些常见编程语言中判断变量是否为空的方法:1.Java在Java中,你可以使用多种方法来判断一个变量是否为空:对于对象:检查是否为 null。java if(object==null){System.out.println("变量为空");}对......