2016-08-25 2 views
0

Je peux obtenir deviceID de WMI, puis je veux utiliser ce deviceID pour vérifier que le périphérique météo est activé/désactivé et si son statut est OK ou non, fondamentalement, je veux utiliser WQL pour interrogez ce périphérique plus tard en utilisant ce périphérique USB unique DeviceID. Voici un exemple de code que je et ai eu exception avecDemande de périphérique USB par DeviceID avec 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) 

Quand je lance ce code, je reçois l'erreur suivante:

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)

probablement ma requête WQL est mal en quelque sorte, pourriez-vous me donner un exemple de la bonne façon de composer la requête?

Répondre

0

\ est un special character dans WQL et doivent être protégés avec une barre oblique inverse afin que votre devid devrait être le suivant:

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

Edit: J'ai aussi remarqué que vous n'êtes pas envelopper la constante alors j'ai ajouté une seule citation autour de la valeur.

+0

avez-vous une idée sur la façon de transformer la chaîne de '\' à '\\'? – user6603026

+0

Si vous utilisez une ancienne version de Python, le plus simple est avec la méthode 'Replace', mais vous devriez vraiment apprendre' Regex' https://docs.python.org/3/library/re.html parce que c'est intégrale à la manipulation de chaîne Python. (Portez une attention particulière à la fonction '.Sub') – Tim