09年的老電腦說想看一下CPU溫度,作為Python工程師,怎能安裝X大師?

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第12天,點選檢視活動詳情

⛳️ 實戰場景

作為一個老程式設計師,手裡有那麼幾臺老電腦也是理所應當的吧,這不最近又了一臺 09 年的舊機器,計劃讓其變為一個區域網小網盤伺服器,但是問題出現了,我需要監測一下 CPU 溫度,安裝某大師顯然是不現實的,我擔心被安裝了全家桶,畢竟舊電腦的硬碟和記憶體本就不富裕,萬一被全家桶安排了,又要重新安裝系統和軟體,太浪費時間了。

那提煉一下需求吧,在不安裝 X 大師的前提下,監測 CPU 溫度

⛳️ 編碼除錯

本篇部落格的例項先從 wmi 模組開始學習,WMI 模組可以訪問,配置,管理 Windows 的資源,例如操作進行,定時任務,遠端啟動計算機,獲取事件日誌,操作登錄檔,獲取電腦 CPI 資訊。

使用前先通過下述命令安裝模組。

shell pip install wmi

先學習一下 CPU 相關資訊的示例程式碼:

```python import wmi

def get_cpu(): c = wmi.WMI()

cpu_list = c.Win32_Processor()
print(cpu_list)

if name == 'main': get_cpu() ```

上述程式碼先通過 wmi.WMI() 例項化了一個 wmi 物件,然後呼叫其 Win32_Processor() 方法,獲取 CPU 處理器物件列表。

09年的老電腦說想看一下CPU溫度,作為Python工程師,怎能安裝X大師? 可以通過 cpu.Name 獲取 CPU 型號。

python for cpu in cpu_list: print("CPU型號:", cpu.Name)

橡皮擦本地電腦的型號如下所示:

shell CPU型號: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz

可以通過 cpu.NumberOfCores 獲取核心數,更多引數可以通過 help() 函式獲取。

wmi.Win32_ComputerSystem 獲取電腦的製造商,機器型號

示例程式碼如下所示:

```python import wmi

w = wmi.WMI() obj = w.Win32_ComputerSystem()[0]

print(obj) ```

輸出內容如下:

shell instance of Win32_ComputerSystem { AdminPasswordStatus = 3; AutomaticManagedPagefile = TRUE; AutomaticResetBootOption = TRUE; …… EnableDaylightSavingsTime = TRUE; FrontPanelResetStatus = 3; HypervisorPresent = FALSE; InfraredSupported = FALSE; KeyboardPasswordStatus = 3; Manufacturer = "Colorful Technology And Development Co.,LTD"; Model = "Battle Axe C.xxxx"; Name = "DESKTOP-xxxxx"; …… UserName = "DESKTOP-xxxxx\\Admin"; WakeUpType = 6; Workgroup = "WORKGROUP"; };

與該方法類似的有 wmi.Win32_OperatingSystem(),獲取作業系統相關資訊。

```python if name == 'main': import wmi

w = wmi.WMI()
obj = w.Win32_OperatingSystem()[0]

print(obj)

```

wmi.Win32_DiskDrive 獲取電腦磁碟資訊

檢視電腦硬碟分割槽,硬碟大小,硬碟製造商等資料,可以使用 wmi.Win32_DiskDrive() 方法進行操作,程式碼如下:

```python import wmi

w = wmi.WMI() disk = w.Win32_DiskDrive() print(disk) ```

wmi.Win32_Process 獲取程序,wmi.Win32_Service 獲取服務

程序和服務的獲取,也可以直接呼叫 wmi 物件的方法,示例程式碼如下所示:

```python import wmi

w = wmi.WMI() p = w.Win32_Process()[0] print(p) ```

⛳️ 編碼獲取溫度

原計劃直接使用 wmi 獲取 CPU 溫度,實戰之後發現部分電腦並未提供溫度介面,只能進行曲線編碼了。先做一下準備工作,下載 OpenHardwareMonitor 檔案,目標獲取其壓縮包中的 OpenHardwareMonitorLib.dll ,即下文的引用檔案。

下載地址:https://openhardwaremonitor.org/downloads/

獲取溫度的示例程式碼如下所示,import clr 使用前,需安裝對應模組:

shell pip install pythonnet

準備工作完成,可直接參考下述程式碼,獲取一次 CPU 溫度,多次獲取需要寫死迴圈實現。

```python import clr # 匯入 pythonnet 模組

OpenHardwareMonitorLib 路徑

clr.AddReference(r'C:\Users\Admin\Downloads\openhardwaremonitor-v0.9.6\OpenHardwareMonitor\OpenHardwareMonitorLib.dll')

匯入 dll 中的 Computer 模組

from OpenHardwareMonitor.Hardware import Computer

c = Computer()

c.CPUEnabled = True # 獲取 CPU 相關資訊 c.GPUEnabled = True # 獲取 GPU 相關資訊 c.Open() for a in range(0, len(c.Hardware[0].Sensors)): print(c.Hardware[0].Sensors[a].Identifier) if "/temperature" in str(c.Hardware[0].Sensors[a].Identifier): print(c.Hardware[0].Sensors[a].get_Value()) ```

上述程式碼執行時還需要特別注意下,需要使用管理員許可權執行,例如在控制檯操作,需要用管理員身份開啟控制檯,在 PyCharm 中操作,也需要用管理員身份開啟。

上述獲取溫度的程式碼實現比較複雜,那有沒有簡單的方式呢,還真有(但是大家獲取的值都不是很準確):

安裝 pyspectator 模組獲取 CPU 溫度:

```python

使用 pyspectator 模組獲取電腦溫度

import time from pyspectator.processor import Cpu cpu = Cpu(monitoring_latency=1) with cpu: while True: print(f' 溫度: {cpu.temperature} °C') time.sleep(2) ```

📢📢📢📢📢📢 💗 你正在閱讀 【夢想橡皮擦】 的部落格 👍 閱讀完畢,可以點點小手贊一下 🌻 發現錯誤,直接評論區中指正吧 📆 橡皮擦的第 726 篇原創部落格

「其他文章」