中标麒麟(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环 ...
随机推荐
- [SF] Symfony 在 console 中结合 Workerman
在web框架的console中,命令不再是直接指定入口文件,如以往 php test.php start,而是类似 php app/console do 的形式. workerman 对命令的解析是 ...
- sklearn中的SVM
scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类.另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类 ...
- python 随机生成图片验证码背景RGB-浅色或者深色
import random def random_color(is_light = True): return (random.randint(0 ,127) + int(is_light) * 12 ...
- 爬虫之Selenium 动态渲染页面爬取
Selenim 是一个自动化测试工具,可以利用它驱动浏览器执行特定的动作,如点击.下拉等操作,同时可以获取浏览器当前呈现的页面的源代码,做到可见及可爬 1.使用流程 1)声明浏览器对象 Seleniu ...
- v8:: fatalProcessOutOfMemory
express项目,用于画图读写图片数据, pm2 作为进城守护. 生产环节报警:v8:: fatalProcessOutOfMemory,xxxx等,一时不知道什么原因. linux系统下使用如下命 ...
- Python之Unittest和Requests库详解
1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...
- Docker容器镜像瘦身的三个小窍门(转)
[转自:http://dockone.io/article/8174] 在构建Docker容器时,我们应尽可能减小镜像的大小.使用共享层的镜像尺寸越小,其传输和部署速度越快. 不过在每个RUN语句都会 ...
- # 2018-2019-20175302实验一《Java开发环境的熟悉》实验报告
2018-2019-20175302实验一<Java开发环境的熟悉>实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java ...
- synchronized锁机制 之 代码块锁(转)
synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...
- JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)
面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...