中标麒麟(linux)下Qt调用python数据转换
转自:https://blog.csdn.net/itas109/article/details/78733478
mytest.py文件
# -*- coding: utf-8 -*-
def hello():
print("hello python!")
def test_add(a, b):
c = a + b
print( a, "+", b," = ",c)
return c
C++关键代码
/* Python解释器的初始化*/ Py_Initialize(); if(!Py_IsInitialized()) { qDebug()<< ("初始化失败!"); return ; }
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
/* 导入Python模块,并检验是否正确导入 */
modulename = Py_BuildValue("s", "mytest");
module = PyImport_Import(modulename);
if(!module)
{
qDebug()<<("导入pytest失败!");
return ;
}
/* 获得模块中函数并检验其有效性 */
dic = PyModule_GetDict(module);
if(!dic)
{
qDebug()<<("错误!\n");
return ;
}
/* 获得sum函数地址并验证 */
func = PyDict_GetItemString(dic,“test_add”);
if(!PyCallable_Check(func))
{
qDebug()<<"不能找到函数 "<<funcname1;
return ;
}
// 创建元组设置参数
PyObject* args = PyTuple_New(2); // 2个参数
PyObject* arg1 = PyLong_FromLong(4); // 参数一设为4
PyObject* arg2 = PyLong_FromLong(3); // 参数二设为3
PyTuple_SetItem(args, 0, arg1);
PyTuple_SetItem(args, 1, arg2); // 调用函数
PyObject* pRet = PyObject_CallObject(func, args); // 获取参数
if (pRet) // 验证是否调用成功
{
long result = PyLong_AsLong(pRet);
LogInfo << "result:" << result;
}
/* 结束Python解释器 */
Py_Finalize();
Py_BuildValue函数
// 创建元组设置参数
PyObject* args = PyTuple_New(2); // 2个参数
args= Py_BuildValue("(i,i)",4,3);
作用:将C/C++类型类型的数据转变成PyObject*对象。
原型:PyAPI_FUNC(PyObject*) Py_BuildValue(const char *format, ...);(VC中复制过来的),有点类似与printf(format,…).
参数解释:format及转换格式,类似与C语言中%d,%f,后面的不定参数对应前面的格式,具体格式如下:
"s"(string) [char *] :将C字符串转换成Python对象,如果C字符串为空,返回NONE。
"s#"(string) [char *, int] :将C字符串和它的长度转换成Python对象,如果C字符串为空指针,长度忽略,返回NONE。
"z"(string or None) [char *] :作用同"s"。
"z#" (stringor None) [char *, int] :作用同"s#"。
"i"(integer) [int] :将一个C类型的int转换成Python int对象。
"b"(integer) [char] :作用同"i"。
"h"(integer) [short int] :作用同"i"。
"l"(integer) [long int] :将C类型的long转换成Pyhon中的int对象。
"c"(string of length 1) [char] :将C类型的char转换成长度为1的Python字符串对象。
"d"(float) [double] :将C类型的double转换成python中的浮点型对象。
"f"(float) [float] :作用同"d"。
"O&"(object) [converter, anything] :将任何数据类型通过转换函数转换成Python对象,这些数据作为转换函数的参数被调用并且返回一个新的Python对象,如果发生错误返回NULL。
"(items)"(tuple) [matching-items] :将一系列的C值转换成Python元组。
"[items]"(list) [matching-items] :将一系列的C值转换成Python列表。
"{items}"(dictionary) [matching-items] :将一系类的C值转换成Python的字典,每一对连续的C值将转换成一个键值对。
---------------------
作者:itas109
来源:CSDN
原文:https://blog.csdn.net/itas109/article/details/78733478
中标麒麟(linux)下Qt调用python数据转换的更多相关文章
- 中标麒麟(linux)下Qt调用python
转自:https://blog.csdn.net/lwlgzy/article/details/83857297 http://www.cnblogs.com/jiaping/p/6321859.ht ...
- Linux下Qt调用共享库文件.so
修改已有的pro文件,添加如下几句: INCLUDEPATH += /home/ubuntu/camera/camera/LIBS += -L/home/ubuntu/camera/camera -l ...
- 基于Linux(中标麒麟)上QT的环境搭建
最近由于公司需要,需要在中标麒麟上进行QT的二次开发,但是网上的资料很少,就算是有也基本都是其他的版本的Linux上的搭建.中标麒麟本身的资料也很好,而且还只能试用60天. 下面就介绍下我对此环境的搭 ...
- 国产中标麒麟Linux部署dotnet core 环境并运行项目 (二) 部署运行控制台项目
背景 在上一篇文章安装dotnet core,已经安装好dotnet core了.之前只是安装成功了dotnet, 输入dotnet --info,可以确认安装成功了,但是在运行代码时,还是报错了,本 ...
- Linux下Qt的安装与配置
参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...
- linux下java调用.so动态库方法2: JNA
摘自:http://blog.csdn.net/todorovchen/article/details/21319033 另请参见: http://blog.sina.com.cn/s/blog_8c ...
- linux下java调用.so文件的方法1: JNI
摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...
- [转]linux下编译boost.python
转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...
- linux下C调用lua的第一个程序
linux下C调用lua的第一个程序 linux的环境是Fedora 18,运行在VM workstation中,以开发模式安装,自带了lua 5.1.4,可以在命令行上直接用lua命令进入到lua环 ...
随机推荐
- JQ滚动条监听事件
版权归作者所有,任何形式转载请联系作者.作者:帅阿猪(来自豆瓣)来源:https://www.douban.com/note/637256366/ 先来一个小例子: $(document).ready ...
- python+Django+test 测试数据库生成报错
前提: 使用Django自带的test进行单元测试. 问题描述: 运行:python manage.py test,报错,出现数据库乱码的现象,报错如下: Creating test database ...
- 项目(七)SVN版本管理与大型代码上线方案
SVN介绍 Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具管理着随时间改变的各种数据.这些数据放置 ...
- 基于DPDK的高效包处理系统
一.概念 Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用 ...
- 解决git中upstream丢失问题Your branch is based on 'origin/xxxx', but the upstream is gone.
转自 https://blog.csdn.net/limengke123/article/details/77850134
- vue响应式原理
vue的响应式,数据模型仅仅是普通的Javascript对象.当你修改它们时,视图会进行更新 那么如何追踪变化: 当把普通的js对象传给vue实例的data选项,Vue将遍历此对象的所有属性,并使用O ...
- 100-days: twenty-seven
Title: Criticism for China's child modeling(代指从事模特行业的人) industry after video of 3-year-old being kic ...
- Java8-函数式接口理解及测试
1. 函数式接口的理解 根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来看,Java8新引入的函数式接口就是基于这个思想进行设计的. 2. 函数式接口定义 2.1 自定义如下 需要 ...
- 【Spring学习】SpringMVC demo搭建
前言:今天会通过IDEA建立一个SpringMVC的demo项目,在其中会涉及到一些基础模块和相关知识,然后结合这个具体的知识点,理解清楚SpringMVC的框架原理(以图的形式展示),顺藤摸瓜分析源 ...
- MyBatis-Plus学习笔记
MybatisPlus的全局策略配置 注意:我们写的配置还要加到 MybatisSqlSessionFactoryBean 中 applicationContext.xml <!--定义Myba ...