日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python处理QXDM抓取log

發布時間:2023/12/10 python 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python处理QXDM抓取log 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、原理

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.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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。