Qt 与python之间的通信(一)

  自己目前了解的qt和python 通信的两种方法。
1:利用python模块进行通讯,
2;利用Qt进程,调用python.exe来运行py脚本
如下是和Qt正常通讯的步骤: 只要遵守如下步骤,和python通讯准没问题。
先就讲解第一种方法:
//添加python运行的库文件路径
  Py_SetPythonHome(python_path.toLocal8Bit().data());
 //初始化
 Py_Initialize();
    if (!Py_IsInitialized()) {
        return false;
    }
    PyObject* pModule = NULL;
    PyObject* pFunc = NULL;
    PyObject* pParam = NULL;
    PyObject* pResult = NULL;
    qDebug()<<"****************************";
    //导入模块
    pModule = PyImport_ImportModule("jar_check");
    if (!pModule) {
        qDebug()<<"------------------import fail---------------";
    }
     //调用模块中的函数
    pFunc = PyObject_GetAttrString(pModule, "main");
    if (!pFunc) {
        Py_DECREF(pModule);
        return false;
    }
 
    //将c语言的数据类型转换成python对象,意思就是给python传入参数(ss)代表的是元组类型的字符串
    pParam = Py_BuildValue("(ss)", sdk_path.toLocal8Bit().data(),jar_path.toLocal8Bit().data());
    //将参数传递给函数
    pResult = PyEval_CallObject(pFunc, pParam);
    if (!pResult) {
        Py_DECREF(pParam);
        Py_DECREF(pFunc);
        Py_DECREF(pModule);
        return false;
    }
   
 
 
     int code=-1;
   //一下是将python返回的数据转换成c的格式。
    if (!PyArg_Parse(pResult, "i", &code)) {
        Py_DECREF(pParam);
        Py_DECREF(pResult);
        Py_DECREF(pFunc);
        Py_DECREF(pModule);
        return false;
    }
 
    Py_DECREF(pParam);
    Py_DECREF(pResult);
    Py_DECREF(pFunc);
    Py_DECREF(pModule);
   //结束
 
    Py_Finalize();

可能,有的人按照如下步骤走:还是会报错:
请仔细看:
1:工程文件的配置:加上这两句.
INCLUDEPATH += \
-I C:\Python27\include
 
 
LIBS += \
        -L C:\Python27\libs -lpython27
2:在python->lib->site-packages 目录下添加一个*.pth的文件。以pth结尾的。比如path.pth.
在里面添加python脚本所要运行的脚本路径;
举个例子:
 import sys
 sys.path.append(路径)
其实就和他的意思一样。这样python就会自动在自己的系统内部去找所运行的脚本。



以下是自己写的脚本,只是一小部分。刚好能和上面的例子对应上。
import os
from check import Check
import sys
from apktool import ApkTool
import shutil
# -*-coding:utf-8-*-
def main(sdk_path,jar_path):
     print os.getcwd()
     jar = ApkTool(jar_path)
     temp_path = jar.decode(sdk_path, True)
     ver_path=os.path.join(temp_path,"res","raw","lebian_releaseid.txt")
     file=open(ver_path,'r')
     for i in file:
         if i[0]=="V":
           version=i.strip('\n')
           break
     current_path="D:\\"
     list=["subpackage","update"]
     print("--------------------------------------")
     subpackage=Check(temp_path,current_path,version,list)
     subpackage.init_fun()
     shutil.rmtree(temp_path, True)
     return 0
if __name__=='__main__':
    main(sys.argv[1],sys.argv[2]);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值