[python-win32] wmi query error
Nick Moszer
nick.moszer at packetdigital.com
Tue Oct 20 22:46:18 CEST 2009
Hello,
I'm occasionally receiving the following error when doing a set of queries:
Traceback (most recent call last):
File "psg5220_demo.py", line 236, in find_hdd_drives
partitions = services.query(query)
File "...path..\wmi.py", line 889, in query
return [ _wmi_object (obj, instance_of, fields) for obj in
self._raw_query(w
ql) ]
File "C:\Python26\lib\site-packages\win32com\client\util.py", line 84,
in next
return _get_good_object_(self._iter_.next(), resultCLSID =
self.resultCLSID)
pywintypes.com_error: (-2147217406, 'OLE error 0x80041002', None, None)
The code being run is as follows:
try:
#Setup the WMI handle.
services = wmi.WMI('.',
moniker="winmgmts:{impersonationLevel=impersonate,(security)}",
find_classes=True)
# loop over physical disks and get serial numbers
for disk in services.Win32_PhysicalMedia():
serials[disk.Tag] = disk.SerialNumber
serials_reversed[disk.Tag] = disk.SerialNumber
# get the physical <-> drive letter mapping
for disk in services.Win32_DiskDrive():
query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=\"%s\"} " \
% disk.DeviceID #re.sub(r"\\", r"\\\\", disk.DeviceID)
query += "WHERE AssocClass = Win32_DiskDriveToDiskPartition "
partitions = services.query(query)
for part in partitions:
query = "ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='%s'} " \
% part.DeviceID
query += "WHERE AssocClass = Win32_LogicalDiskToPartition"
logical_drives = services.query(query)
for logical_drive in logical_drives:
drive_letter = re.sub(":", "", logical_drive.DeviceID)
drive_letters[drive_letter] = disk.DeviceID
This is on Windows XP and Vista both. It sometimes happens once then
not again for 50 tries. Sometimes it happens 5 times in a row. It
appears that an "OLE Error 0x80041002" is an "object not found error".
So the query is running and line 86 in util.py is trying to get the next
result from the query and is bombing out? For some reason it things
there are more results then there actually are? This code is a direct
port from working Perl code. Anyone have any ideas?
More information about the python-win32
mailing list