我一直在尝试使用Python脚本来显示我的硬件中的CPU,GPU和其他可用传感器的温度,但我没有找到任何有用的东西.
我尝试使用WMI来获取这些值,但我的处理器显然不受支持.
我使用的代码是:
import wmi
w = wmi.WMI(namespace="root\wmi")
temperature_info = w.MSAcpi_ThermalZoneTemperature()[0]
print temperature_info.CurrentTemperature
Run Code Online (Sandbox Code Playgroud)
我从另一个stackoverflow线程获得,我得到错误Traceback(最近一次调用最后):
File "C:/Users/Joe/Desktop/test.py", line 3, in <module>
temperature_info = w.MSAcpi_ThermalZoneTemperature()[0]
File "C:\Python27\lib\site-packages\wmi.py", line 819, in query
handle_com_error ()
File "C:\Python27\lib\site-packages\wmi.py", line 241, in handle_com_error
raise klass (com_error=err)
x_wmi: <x_wmi: Unexpected COM Error (-2147217396, 'OLE error 0x8004100c', None, None)>
Run Code Online (Sandbox Code Playgroud)
根据Microsoft支持,这意味着Not Supported (0x8004100C)
我已经尝试在cmd.exe窗口中运行此代码的命令行版本作为管理员运行,但我得到了同样的错误.
有没有其他方法可以访问CPU和GPU温度?
PS:我的操作系统是Windows 10,我的CPU是AMD FX-8350.我不确定我的操作系统或我的CPU是否有错误.
这是列表的示例列表:
sample = [[6594, 3084, 6956, 3429], [6401, 1154, 6693, 1436], [6463, 712, 6754, 1015]]
Run Code Online (Sandbox Code Playgroud)
现在我有一个要求,字符串中不能有逗号,所以在子列表中,我必须用“:”替换逗号,两个列表之间的逗号必须用“|”替换。
最后,输出将如下所示:
"6594: 3084: 6956: 3429|6401: 1154: 6693: 1436|6463: 712: 6754: 1015"
Run Code Online (Sandbox Code Playgroud)
我尝试使用 join 方法,首先将列表列表转换为字符串:
sample = str([[6594, 3084, 6956, 3429], [6401, 1154, 6693, 1436], [6463, 712, 6754, 1015]])
final_result = "|".join(sample)
Run Code Online (Sandbox Code Playgroud)
这给了我输出字符串:
'[6594, 3084, 6956, 3429]|[6401, 1154, 6693, 1436]|[6463, 712, 6754, 1015]'
Run Code Online (Sandbox Code Playgroud)
所以这已经进行了一半。但是我不能再次应用 join 方法,因为每个数字都是一个字符串,我会得到一个看起来很有趣的输出。
我知道编写一个嵌套的 for 循环可以解决这个问题,但是有没有更优雅的方法,比如使用“join”或“map”或任何类似的方法?
注意:输出必须是如上所示的字符串格式。