【发布时间】:2014-07-24 13:02:25
【问题描述】:
我正在尝试从 Pythons WMI 模块获取一些系统信息,但是网上提到的所有方法似乎都不起作用。我知道用其他语言更容易做到这一点,但出于某种原因,我想尝试在 Python 中做到这一点。
我尝试过使用Win32_TemperatureProbe() 方法,但我得到了None 的返回值。我也试过MSAcpi_ThermalZoneTemperature(),错误如下。我一直在做我的研究,似乎找不到任何替代方法或修复这些错误。似乎有很多线程打开但没有解决。
这是我当前的代码:
import wmi, platform
#Initiating WMI
c = wmi.WMI(namespace="root\\wmi")
#Setting variables
drive_letter, free_space = [], []
stats = {}
#Getting basic infromation
print(platform.processor())
print(c.MSAcpi_ThermalZoneTemperature()[0].CurrentTemperature/10.0)-273.15
for disk in c.Win32_LogicalDisk(["Caption","FreeSpace"], DriveType=3):
free_space_GB = round(int((disk.FreeSpace))/1073741824, 2)
drive_letter.append(str(disk.Caption))
free_space.append(str(free_space_GB))
stats = {"Free Space":free_space, "Drive Letter":drive_letter}
print(stats)
这是我运行此代码时得到的输出:
Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\wmi.py", line 817, in query
return self._namespace.query (wql, self, fields)
File "C:\Python34\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:\Python34\lib\site-packages\wmi.py", line 1009, in <listcomp>
return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
File "C:\Python34\lib\site-packages\win32com\client\dynamic.py", line 247, in __getitem__
return self._get_good_object_(self._enum_.__getitem__(index))
File "C:\Python34\lib\site-packages\win32com\client\util.py", line 37, in __getitem__
return self.__GetIndex(index)
File "C:\Python34\lib\site-packages\win32com\client\util.py", line 53, in __GetIndex
result = self._oleobj_.Next(1)
pywintypes.com_error: (-2147217396, 'OLE error 0x8004100c', None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Brandyn\Desktop\Performance_monitor.py", line 12, in <module>
print(c.MSAcpi_ThermalZoneTemperature()[0].CurrentTemperature/10.0)-273.15
File "C:\Python34\lib\site-packages\wmi.py", line 819, in query
handle_com_error ()
File "C:\Python34\lib\site-packages\wmi.py", line 241, in handle_com_error
raise klass (com_error=err)
wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147217396, 'OLE error 0x8004100c', None, None)>
当我将命名空间更改为 null 时,错误变为:
Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\wmi.py", line 1145, in __getattr__
return self._cached_classes (attribute)
File "C:\Python34\lib\site-packages\wmi.py", line 1156, in _cached_classes
self._classes_map[class_name] = _wmi_class (self, self._namespace.Get (class_name))
File "<COMObject winmgmts:>", line 3, in Get
File "C:\Python34\lib\site-packages\win32com\client\dynamic.py", line 282, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'SWbemServicesEx', 'Not found ', None, 0, -2147217406), None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Brandyn\Desktop\Performance_monitor.py", line 12, in <module>
print(c.MSAcpi_ThermalZoneTemperature()[0].CurrentTemperature/10.0)-273.15
File "C:\Python34\lib\site-packages\wmi.py", line 1147, in __getattr__
return getattr (self._namespace, attribute)
File "C:\Python34\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: winmgmts:.MSAcpi_ThermalZoneTemperature
此方法是否有解决方案,或者是否有其他可行的替代方法,或者我应该停止此方法并专注于不同的语言?
【问题讨论】:
-
我遇到了同样的问题,你能找到解决问题的方法吗?或任何在 Windows 上查找 CPU 温度的解决方案?