一、原理

QXDM抓取log为isf格式,需要用QCAT打开进行分析,如果需要自动分析QXDM抓取的log,一个可行的方法为调用QCAT的COM接口打开isf文件并进行分析。

QCAT 6.X支持基于COM的接口调用,允许用户通过Perl、VBScript、JavaScript、Python等脚本语言调用应用。具体调用方法在QCAT安装后的《QCAT User Guide》用户手册中,第六章Scripting with QCAT (Windows Only) 详述了QCAT COM编程可用的接口。

二、关键步骤

1、安装pywin32模块

如果要进行com编程需要安装pywin32模块才能进行COM调用

pip install pywin32

2、通过COM接口打开QCAT

import win32com.clienttry:qcatApp = win32com.client.Dispatch("QCAT6.Application")
except :QMessageBox.warning(self, '', 'QCAT打开失败,请检查QCAT')sys.exit(1)

3、设置过滤器

self.TargetLogId = 0xB0C0   SIBFilter = qcatApp.PacketFilter
SIBFilter.SetAll(False) #设置过滤所有的消息类型SIBFilter.Set(self.TargetLogId, True)  #只显示类型为0xB0C0的log,可以设置多次filter显示不同类型LOG
SIBFilter.Commit()

4、打开UE LOG文件

if qcatApp.OpenLog(winfilepath) != 1:  #winfilepath为需要打开的文档路径print("Open Log Error")exit()
print("file open ok")

5、遍历UE LOG过滤后内容

QcatPacket = qcatApp.FirstPacket  #第一包QcatPacket.Next() #下一包,如果已经是最后一包则该方法返回FALSEQcatPacket.text #获取QCAT解码的内容

三、常见问题

由于调用QcatPacket.text获取QCAT解码的内容,然后通过文本处理的方式对log进行处理,语法上是对str进行处理,但是由于协议兼容性,有很多地方需要注意。

1、注意可选信元和信令

很多信元是可选的,因此需要先设置信元的默认值,然后判断需要解析的信元是否存在,如果没有解析出来则说明为默认值。

有些信令比如SIB2~8需要根据SIB1来判断是否存在,如果不存在则无需等待收集齐后处理。

对于SIB3、SIB5和SIB6等SIB处理,都含有cellReselectionPriority,需要判断每个cellReselectionPriority对应的频点,不可混淆,特别多个SIB在同一个周期调度时更需要注意。

2、兼容不同版本协议

比如同频重选门限对于R8为"s-IntraSearch ",对于R9为"s-IntraSearchP-r9",由于"s-IntraSearchP-r9"包含了"s-IntraSearch",为了避免R8和R9的参数混合了,这里需要在"s-IntraSearch"后面加一个空格,判断如果含有"s-IntraSearch "则为R8,如果含有"s-IntraSearchP-r9"则为R9。

自定义的内部信元更需要注意,比如“0xB193 LTE ML1 Serving Cell Meas Response”中,较早的终端SINR显示为“SINR Rx[0]”,有些较新的终端则显示为“SNR Rx[0]”,处理时统一根据“NR Rx[0]”来判断。

3、注意数据转换

有些信元的取值范围可以是数字,也可以是invalid或者infinity等,如果简单将str转换为int,会出现转化失败的情况,因此需要先通过str.isdigit()判断是否能转换为数字,然后再转换。

4、pywin32与多线程

用com调用QCAT处理log时,一开始单线程没有问题,一到多线程程序就崩溃,查到下面这篇文档。

http://irootlee.com/python_pywin32_thread/

因为COM对象属于一个线程,该线程与当前的线程无法正常通信,所以导致在多线程中调用Dispatch函数会报错。

我们需要Windows提供的函数Coinitialize来创建一个套间,使得他们可以正常关联和执行,具体方法就是在多线程中调用COM对象代码前面加上pythoncom.CoInitialize(),最后在COM对象调用结束后加上pythoncom.CoUninitialize()释放资源。

四、Python获取终端log

查看QXDM User Guide,python也可以通过COM接口调用QXDM获取终端log。

#初始化
import win32com.client
app = win32com.client.Dispatch("QXDM.QXDMAutoApplication")
qxdm = app.GetAutomationWindow()#查看QXDM版本
version = qxdm.AppVersion
#加载.dmc配置文件,根据配置文件抓取终端log
qxdm.LoadConfig('XXXXXX.dmc')
#设置终端的调试端口,连接终端
response = qxdm.SetComPort(XX)
#获取当前已经抓到的log的数量
qxdm.GetItemCount()
#存储终端log
qxdm.SaveItemStore('XXXXXX.isf')#退出QXDM
qxdm.QuitApplication()

Python处理QXDM抓取log相关推荐

  1. 高通QXDM抓取log

    https://blog.csdn.net/u010164190/article/details/79913808

  2. python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  3. python抓取微信朋友圈动态_2018最全如何利用Python网络爬虫抓取微信朋友圈的动态...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  4. 2018最全如何利用Python网络爬虫抓取微信朋友圈的动态

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  5. 【转载】logcat在华为手机上运行时无法抓取log的问题

    2019独角兽企业重金招聘Python工程师标准>>> logcat在华为手机上运行时,若一直提示请等待,无法抓取log,则很可能是系统没有打开log开关导致,操作方法如下: 1. ...

  6. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  7. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  8. 独家 | 手把手教你用Python进行Web抓取(附代码)

    作者:Kerry Parker 翻译:田晓宁 校对:丁楠雅 本文约2900字,建议阅读10分钟. 本教程以在Fast Track上收集百强公司的数据为例,教你抓取网页信息. 作为一名数据科学家,我在工 ...

  9. Python requests 多线程抓取 出现HTTPConnectionPool Max retires exceeded异常

    Python requests 多线程抓取 出现HTTPConnectionPool Max retires exceeded异常 参考文章: (1)Python requests 多线程抓取 出现H ...

  10. python lxml使用_使用lxml和Python进行Web抓取的简介

    python lxml使用 by Timber.io 由Timber.io 使用lxml和Python进行Web抓取的简介 (An Intro to Web Scraping with lxml an ...

最新文章

  1. linux修正系统错误指令fsck和badblocks
  2. 佐治亚理工学院硕士建议:2022年你应该掌握这些机器学习算法
  3. 第十六界智能车竞赛:这问题怎么越来越多了呢?
  4. 用 Python 和 OpenCV 检测图片上的条形码Detecting Barcodes in Images with Python and OpenCV
  5. java at发短信_发送短信(1)
  6. 电力期刊论文实现:微电网经济调度(程序讲解)
  7. Windows 10升级1909之后,很多软件不支持高分辨率而造成字体过小
  8. 文档过期打不开怎么办_标准的产品需求文档在这里!(详细说明版)(2)
  9. 微型计算机实验四答案,微型计算机技术实验指导书的答案.doc
  10. vue.js上传头像插件_一个基于vue2.0的头像上传组件
  11. FTP 1 协议分析
  12. 利用SMS轻松实现资产管理,SMS2003系列之四
  13. android数据库汉字,GitHub - JamesLiAndroid/chinese-xinhua: 中华新华字典数据库。包括歇后语,成语,词语,汉字。提供新华字典API。...
  14. 发现一个提供免费英文软件类书籍的网站[xgluxv]
  15. win10自带计算器怎么设置中文
  16. 【建议收藏】15755字,讲透MySQL性能优化(包含MySQL架构、存储引擎、调优工具、SQL、索引、建议等等)
  17. 【扫盲】硬盘接口『 SATA 、 mSATA 、 m.2 ( NGFF )、PCI-E ( PICe 、 PCI Express ) 』及其协议 『 NVMe 、 AHCI 』
  18. Unsupported major.minor version 52.0 解决方案
  19. java web ip_详解Java Web如何限制访问的IP的两种方法
  20. 程序员加班看不上球赛崩溃,外卖小哥伸出援手:我帮你改代码

热门文章

  1. bzoj2525 1426
  2. Excel数据透视表制作
  3. 2018百度之星程序设计大赛初赛B——1002hex
  4. 【电子书】Head First 设计模式
  5. 计算机组成原理知识体系
  6. [Excel图表实战技巧精粹].Excel.Home.扫描版 百度云
  7. unity3D禁用脚本
  8. 04 - 雷达的工作频率
  9. 一些值得学习的Unity教程
  10. 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc