Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法
這篇博客介紹了如何使用Python讀取計(jì)算機(jī)的CPU、GPU、硬盤等部件的溫度,讀取后的信息可以根據(jù)需要進(jìn)行日志記錄、溫度監(jiān)控等。
根據(jù)不同的平臺(tái),本文分別介紹Windows下和Linux下的部件溫度讀取方法。
Windows下讀取方法
這種方法僅適用于Windows10,Windows11運(yùn)行會(huì)報(bào)錯(cuò)(我原本是在Windows10下寫的代碼,能正常讀取溫度,但是電腦更新到Windows11后運(yùn)行直接就報(bào)錯(cuò)了),至于其他更低版本的Windows系統(tǒng)則沒有測(cè)試過。
Windows下讀取計(jì)算機(jī)部件的溫度需要用到一款叫做 Open Hardware Monitor 的軟件(下載地址),下載后得到的是一個(gè)壓縮包,解壓后的結(jié)果如下:

- 這里我們主要用到兩個(gè)文件(紅色框標(biāo)記),也是利用這個(gè)軟件的兩種方法。
- 使用 OpenHardwareMonitor.exe
- 這種方法要求始終在后臺(tái)保持 OpenHardwareMonitor.exe 處于運(yùn)行狀態(tài)。
- 程序運(yùn)行需要管理員權(quán)限??梢栽趩?dòng)IDE時(shí)便選擇
以管理員權(quán)限運(yùn)行。
以下為代碼:
import ctypes
import datetime
import sys
import time
import wmi
import psutil
import subprocess
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except Exception:
return False
def check_process(path, proc_name):
for proc in psutil.process_iter():
if proc.name() == proc_name:
break
else:
subprocess.Popen(path + proc_name)
time.sleep(5)
if is_admin():
path = 'openhardwaremonitor-v0.9.6/OpenHardwareMonitor/'
proc_name = "OpenHardwareMonitor.exe"
check_process(path, proc_name)
w = wmi.WMI(namespace='root/OpenHardwareMonitor')
while True:
print('{:=^50}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
temperature_info = w.Sensor()
temperature_info = sorted(temperature_info, key=lambda x: str(x.Identifier))
for sensor in temperature_info:
if sensor.SensorType == 'Temperature':
identifier = str(sensor.Identifier).split('/')
print(
'{0:^20}的當(dāng)前溫度為:{1:>5}℃'.format('-'.join([identifier[1], identifier[2], identifier[-1]]),
sensor.Value))
time.sleep(1)
else:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
輸出示例:

- 使用 OpenHardwareMonitorLib.dll
- 這種方法類似于將 OpenHardwareMonitorLib.dll 作為第三方庫(kù)引入到python中。
- 同樣的,運(yùn)行代碼需要管理員權(quán)限,否則啥都讀不出來??梢栽趩?dòng)IDE時(shí)便選擇
以管理員權(quán)限運(yùn)行。
以下為代碼:
import clr
import time
import datetime
clr.AddReference('D:/OpenHardwareMonitor/OpenHardwareMonitorLib.dll') # 填寫絕對(duì)路徑
import OpenHardwareMonitor as ohm
from OpenHardwareMonitor.Hardware import Computer, HardwareType, SensorType
computer = Computer()
computer.CPUEnabled = True
computer.GPUEnabled = True
computer.HDDEnabled = True
computer.RAMEnabled = True
computer.MainboardEnabled = True
computer.FanControllerEnabled = True
hardwareType = ohm.Hardware.HardwareType
sensorType = ohm.Hardware.SensorType
computer.Open()
while True:
print('{:=^50}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
for hardware in computer.Hardware:
hardware.Update()
for sensor in hardware.Sensors:
if sensor.SensorType == sensorType.Temperature:
si_ls = str(sensor.Identifier).split('/')
ssname = f'{si_ls[1]}#{si_ls[-1]}'
print(ssname, sensor.Value)
time.sleep(1)
輸出示例:

Linux下讀取方法
- Linux下讀取部件溫度的方法比較簡(jiǎn)單,直接使用 psutil 包即可。代碼如下:
import psutil
def main():
if not hasattr(psutil, "sensors_temperatures"):
sys.exit("platform not supported")
temps = psutil.sensors_temperatures()
if not temps:
sys.exit("can't read any temperature")
for name, entries in temps.items():
print(name)
for entry in entries:
print(" %-20s %s °C (high = %s °C, critical = %s °C)" % (
entry.label or name, entry.current, entry.high,
entry.critical))
print()
main()
輸出示例:

以上就是Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法的詳細(xì)內(nèi)容,更多關(guān)于Python讀取Windows和Linux部件溫度的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python命令行參數(shù)解析之a(chǎn)rgparse模塊詳解
這篇文章主要介紹了Python命令行參數(shù)解析之a(chǎn)rgparse模塊詳解,argparse?是?Python?的一個(gè)標(biāo)準(zhǔn)庫(kù),用于命令行參數(shù)的解析,這意味著我們無需在代碼中手動(dòng)為變量賦值,而是可以直接在命令行中向程序傳遞相應(yīng)的參數(shù),再由變量去讀取這些參數(shù),需要的朋友可以參考下2023-08-08
Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼
下面小編就為大家分享一篇Python實(shí)現(xiàn)控制臺(tái)中的進(jìn)度條功能代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Python之——生成動(dòng)態(tài)路由軌跡圖的實(shí)例
今天小編就為大家分享一篇Python之——生成動(dòng)態(tài)路由軌跡圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python?"手繪風(fēng)格"數(shù)據(jù)可視化方法實(shí)例匯總
這篇文章主要給大家介紹了關(guān)于Python?"手繪風(fēng)格"數(shù)據(jù)可視化方法實(shí)現(xiàn)的相關(guān)資料,本文分別給大家?guī)砹薖ython-matplotlib手繪風(fēng)格圖表繪制、Python-cutecharts手繪風(fēng)格圖表繪制以及Python-py-roughviz手繪風(fēng)格圖表繪制,需要的朋友可以參考下2022-02-02
selenium學(xué)習(xí)教程之定位以及切換frame(iframe)
這篇文章主要給大家介紹了關(guān)于selenium學(xué)習(xí)教程之定位以及切換frame(iframe)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

