【问题标题】:Querying usb device by DeviceID with WQL使用 WQL 通过 DeviceID 查询 USB 设备
【发布时间】:2016-08-25 11:25:04
【问题描述】:

我可以从 WMI 获取 deviceID,然后我想使用该 deviceID 来检查天气设备是否处于启用\禁用状态以及它的状态是否正常,基本上我想稍后使用 WQL 来查询该设备USB 设备唯一设备 ID。这是我使用并遇到异常的代码示例

import wmi
devid = "USB\VID_04F2&PID_B315\6&EF94D1A&0&6"
c = wmi.WMI()
q2 = "SELECT * FROM Win32_PnPEntity WHERE DeviceID = " + devid + " "
dev = c.query(q2)

当我运行此代码时,我收到以下错误:

回溯(最近一次通话最后一次):
文件“”,第 1 行,在
查询中的文件“C:\Python27\lib\site-packages\wmi.py”,第 1009 行
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
文件“C:\Python27\lib\site-packages\win32com\client\util.py”,第 84 行,在下一个 return _get_good_object_(self.iter.next(), resultCLSID = self.resultCLSID )
pywintypes.com_error: (-2147217385, 'OLE 错误 0x80041017', 无, 无)

可能我的 wql 查询在某种程度上是错误的,你能给我举个例子来说明编写查询的正确方法吗?

【问题讨论】:

    标签: python wmi wql


    【解决方案1】:

    \ 是 WQL 中的 special character,必须用反斜杠转义,因此您的 devid 应该是这样的:

    devid = "'USB\\VID_04F2&PID_B315\\6&EF94D1A&0&6'"
    

    编辑:我还注意到你没有包装常量,所以我在值周围添加了一个单引号。

    【讨论】:

    • 你知道如何将字符串从'\'转换为'\\'吗?
    • 如果您使用的是旧版本的 Python,最简单的方法是使用 Replace 方法,但您确实应该学习 Regex docs.python.org/3/library/re.html,因为它是 Python 字符串操作不可或缺的一部分。 (特别注意.Sub函数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多