python读取log文件_python分析log日志

python读取log文件_python分析log日志一、原理QXDM抓取log为isf格式,需要用QCAT打开进行分析,如果需要自动分析QXDM抓取的log,一个可行的方法为调用QCAT的COM接口打开isf文件并进行分析。QCAT6.X支持基于COM的接口调用,允许用户通过Perl、VBScript、JavaScript、Python等脚本语言调用应用。具体调用方法在QCAT安装后的《QCATUserGuide》用户手册中,第六章S…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、原理

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

QCAT 6.X支持基于COM的接口调用,允许用户通过PerlVBScript、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.client

try:
    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() #下一包,如果已经是最后一包则该方法返回FALSE

QcatPacket.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()

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186749.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微信小程序—经纬度逆地址解析的实现「建议收藏」

    微信小程序—经纬度逆地址解析的实现「建议收藏」小ZXZ小

  • pytest的assert_java单元测试断言

    pytest的assert_java单元测试断言前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

  • chrome小恐龙源代码_chrome小恐龙代码

    chrome小恐龙源代码_chrome小恐龙代码Chrome小恐龙前端修改代码代码总结偶然间发现谷歌浏览器的离线小恐龙游戏,上网查找的攻略总结。Chrome小恐龙是什么?在Chrome(谷歌浏览器)断网之后访问在线页面,如a.com会出现以下

  • Matlab中 axis 函数用法总结

    Matlab中 axis 函数用法总结axis——设置坐标轴【功能】对坐标轴进行标定。【语法介绍】axis([xminxmaxyminymax])设置当前二维图形对象的x轴和y轴的取值范围。向量参数[xminxmaxyminymax]中的元素分别表示x轴最小值、x轴最大值、y轴最小值和y轴最大值。axis([xminxmaxyminymaxzminzmaxcmincmax])设置x,y,z轴的取值范围和颜色范围。[xminxmaxyminymaxzminzm

  • PLC控制三相异步电动机正反转系列实训QY-DG800E[通俗易懂]

    PLC控制三相异步电动机正反转系列实训QY-DG800E[通俗易懂]在现代化生产过程中三相异步电动机的应用几乎涵盖了工业农业和人类生活的各个领域。在生产过程中三相异步电动机往往工作在恶劣的环境下,容易产生短路、断相等事故,工作在大型设备的高压电动机与大功率电动机一旦发生故障损失无法估计。在生产过程中,往往要求电动机能够实现正反转来满足人们的需求,如直梯的上升与下降,起重机大车与小车的左右移动以及吊钩的上升与下降等等。传统的继电器控制电路简单实用,但是继电器的频繁动作导致触点不能良好接触而影响工作。在工业生产中,电机调速存在很多不确定的因素,难以做到精确控制。利用PLC

  • 自学编程的妙方法,直接省了几万块钱报班,不收藏就可惜了!

    自学编程的妙方法,直接省了几万块钱报班,不收藏就可惜了!答应我,别再做无用功了,好方法都在这里了!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号