




& "C:\Program Files\Python39\python.exe" c:\Users\Desktop\QXDM_Log.pyModuleNotFoundError: No module named 'win32com'PythonSoftwareFoundation.Python.3.13_xxx\site-packagespywintypes.com_error: (-2147221005, '无效的类字符串', None, None)import win32com.client
q = win32com.client.Dispatch('QXDM.QXDMAutoApplication')reg query HKCR /s /f "QXDM" /k | findstr /i "QXDM"HKEY_CLASSES_ROOT\QXDM.QXDM5AutoApplication
HKEY_CLASSES_ROOT\QXDM.QXDM5AutoApplication.1q = win32com.client.Dispatch('QXDM.QXDM5AutoApplication')
for name in ['Version', 'SetComPort', 'SaveItemStore', 'LoadConfig']:
try:
val = getattr(q, name)
print(f' {name}: {val}')
except Exception as e:
print(f' {name}: ❌ {type(e).__name__}')C:\Program Files\Qualcomm\QXDM5\AutomationSamples\Python\QXDMAutomation\QxdmAutomationSample.pysys.path.append('C:\Program Files\Qualcomm\QXDM5\Support\python')
import QxdmAutomationClient
qxdm_auto_client = QxdmAutomationClient.QxdmAutomationClient("OpenAndSaveSample")
mgr = qxdm_auto_client.getQxdmAutomationManager()
mgr.InitializeService()
mgr.SetVisible(True)
mgr.LoadConfig(dmcFile)SetComPort 失败: 'Client' object has no attribute 'SetComPort'
Connect 也失败: 'Client' object has no attribute 'Connect'AddBookmark, AttachToDataView, ClearViewItems, Close, ConnectToDevice,
CreateView, DisconnectFromDevice, GetAutoSaveISF, GetAverageRxRate,
GetIsPhoneConnected, GetQXDMVersion, InitializeService, LoadConfig,
LoadItemStore, QuitApplication, SaveItemStore, SetAutoSaveISF,
SetBaseISFFileName, SetISFDirPath, SetISFFileSize, SetMaxISFArchives,
SetVisible, ...import QxdmAutomationService.ttypes as t
import inspect
print(inspect.signature(t.ConnectDeviceInfo.__init__))(self, deviceHandle=None, protocolHandle=None, isGpsConnection=None)deviceInfo = ConnectDeviceInfo(str(281474976710656), str(281483566645248))# (deviceHandle, protocolHandle)
(54, 0) → False
(0, 54) → False
(54, 54) → Falseimport QutsClient
import DiagService.constants
client = QutsClient.QutsClient("TestAutomation")
devManager = client.getDeviceManager()
deviceList = devManager.getDevicesForService(DiagService.constants.DIAG_SERVICE_NAME)
protList = devManager.getProtocolList(deviceList[0])
# protocolType == 0 是 diag 协议找到 0 个支持 Diag 的设备allDevices = devManager.getDeviceList()struct.error: required argument is not an integer# 错误写法
protList = devManager.getProtocolList(target_device)
# 正确写法
protList = devManager.getProtocolList(target_device.deviceHandle)deviceInfo = ConnectDeviceInfo(
deviceHandle=562949953421312, # 设备 handle
protocolHandle=562975723225088 # Diag 协议 handle
)
ret = mgr.ConnectToDevice(deviceInfo)ConnectToDevice 返回: True
连接状态: True
设备已连接!mgr.SetAutoSaveISF(True) # 开启自动保存
mgr.SetISFDirPath(save_dir) # 设置保存目录
mgr.SetBaseISFFileName(base_name) # 设置文件名前缀
mgr.SetISFFileSize(50) # 单文件大小上限 50MB
mgr.SetMaxISFArchives(10) # 最多保留 10 个文件json.decoder.JSONDecodeError: Invalid \escape: line 2 column 20import msvcrt
if msvcrt.kbhit():
key = msvcrt.getch()
if key in (b'q', b'Q'):
break
参数 | 值来源 | 说明 |
deviceHandle | QUTS getDeviceList() | QUTS 内部设备句柄,不是 COM 号 |
protocolHandle | QUTS getProtocolList() | Diag 协议 handle,protocolType==0 |
服务端口 | 40091 | QXDM 自动化 Thrift 服务端口 |
ProgID | QXDM.QXDM5AutoApplication | COM 接口 ProgID(但 API 不兼容老版本) |

QXDM_AutoLog/
├── config.json # 配置文件(改参数不用动代码)
├── QXDM_Auto_Log.py # 主脚本(v2,支持按Q停止)
└── 使用说明.txt # 使用说明
# 1. 通过 QUTS 找到第一个 Diag 设备及其协议 handleimport syssys.path.insert(0, r'C:\Program Files\Qualcomm\QUTS\Support\python')sys.path.insert(0, r'C:\Program Files\Qualcomm\QXDM5\Support\python')import QutsClientimport QxdmAutomationClientimport QxdmAutomationService.ttypes as qxdm_typesclient = QutsClient.QutsClient("QXDM_AutoLog")devManager = client.getDeviceManager()# 找有 Diag Service 的设备target = NonediagHandle = Nonefor dev in devManager.getDeviceList():if 'Diag Service' in dev.services:target = devbreak# 找 Diag 协议 (type==0)for p in devManager.getProtocolList(target.deviceHandle):if p.protocolType == 0:diagHandle = p.protocolHandlebreak# 2. 启动 QXDM 并连接qxdm = QxdmAutomationClient.QxdmAutomationClient("AutoLogClient")mgr = qxdm.getQxdmAutomationManager()mgr.InitializeService()mgr.SetVisible(True)info = qxdm_types.ConnectDeviceInfo(deviceHandle=target.deviceHandle,protocolHandle=diagHandle)mgr.ConnectToDevice(info)# 3. 配置自动保存 + 抓 logmgr.SetAutoSaveISF(True)mgr.SetISFDirPath(r"D:\logs")mgr.SetBaseISFFileName("test_log")mgr.SetISFFileSize(100)time.sleep(60) # 抓 60 秒# 4. 收尾mgr.DisconnectFromDevice()mgr.SetAutoSaveISF(False)mgr.QuitApplication()