2016-08-25 62 views
0

我可以从WMI获取设备ID,那么我想使用设备ID来检查气象设备在启用\禁用状态,如果它的状态正常与否,基本上我想用WQL来稍后使用此USB设备唯一的DeviceID查询该设备。这里是我使用,并得到了异常,并通过的DeviceID查询USB设备与WQL

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) 

的代码示例,当我运行这段代码,我得到了以下错误:

Traceback (most recent call last):
File "", line 1, in
File "C:\Python27\lib\site-packages\wmi.py", line 1009, in query
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Python27\lib\site-packages\win32com\client\util.py", line 84, in next return _get_good_object_(self.iter.next(), resultCLSID = self.resultCLSID)
pywintypes.com_error: (-2147217385, 'OLE error 0x80041017', None, None)

也许我WQL查询是错误的莫名其妙,你能给我一个组成查询的正确方式的示例?

回答

0

\是WQL一个special character,必须用反斜杠转义所以你devid应该是这样的:

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

编辑:我也注意到,你是不是包裹固定,所以我增加了一个单引号围绕价值。

+0

你知道如何将字符串从'\'转换为'\\'吗? – user6603026

+0

如果你使用的是旧版本的Python,简单的方法是使用'Replace'方法,但是你真的应该学习'Regex' https://docs.python.org/3/library/re.html,因为它是Python字符串操作的一部分。 (特别注意'.Sub'功能) – Tim