2010-07-16 9 views

risposta

2

Controlla la libreria cputemp.

MODIFICA: in Windows, è possibile convertire questo IronPython script che utilizza WMI utilizzando il python WMI library.

+0

Tuttavia, non sembra supportare i sistemi operativi Windows. –

+0

Mi dice che il mio hardware non è supportato:/ – rectangletangle

+0

Quindi python non è probabilmente una buona scelta di lingua per le tue esigenze. –

3

È possibile utilizzare pywin32 per accedere all'API di Windows nativo. Credo che dovrebbe essere possibile interrogare l'API di Windows per la temperatura della CPU se il produttore del driver della scheda madre registra un provider di dati WMI tramite il proprio driver. Supponendo che questo è il caso si può scaricare il pywin32 extensions e il Python WMI module menzionato nella risposta da ars, e quindi procedere come segue:

import wmi 
w = wmi.WMI() 
print w.Win32_TemperatureProbe()[0].CurrentReading 

Guardando lo script IronPython nella risposta ars' sembra che ci sia un altro modo per fallo anche tu, usando un oggetto WMI diverso. Utilizzando la stessa API e l'approccio si potrebbe provare a ricevere il valore della temperatura con

w = wmi.WMI(namespace="root\wmi") 
temperature_info = w.MSAcpi_ThermalZoneTemperature()[0] 
print temperature_info.CurrentTemperature 

che a quanto pare dovrebbe restituire il valore della temperatura in decimi di Kelvin, in tal modo di ricevere la laurea in Celsius Credo che basta dividere questo valore per 10 e sottrarre ~ 273.

+2

Ottengo il seguente errore con il primo codice: Traceback (chiamata più recente scorso): file "", la linea 244, in run_nodebug File "", linea 3, in IndexError: lista degli indici di intervallo – rectangletangle

+0

Ottengo un sacco di errori (OLE/COM) quando si provano entrambi gli approcci. Qualche idea sul perché potrebbe essere? – Dan

0

Il codice offerta dalla eadmaster può funzionare per le CPU più vecchi che OpenHardwareMonitor è stato programmato per, ma ho una CPU i7 6700K Skylake. OpenHardwareMonitor non ha offerto risultati per me. Tuttavia, esiste un fork di questo programma chiamato CPU Thermometer, che è basato su OpenHardwareMonitor che fa riconosce la mia CPU.

Nel cercare in che modo ottenere i temp della CPU tramite Python, sono passato a IronPython per poter accedere al framework .Net e avere un facile accesso ad altri dati sulle prestazioni, ma dovrebbe essere abbastanza facile capire come utilizzare il retro adattarlo per Vanilla Python 2.7 (Basta eseguire il termometro della CPU invece diOpenHardwareMonitor e cambiare il tuo spazio dei nomi in "root \ CPUThermometer"? Potrebbe essere così semplice?).

# 
# CPU Temp --REQUIRES CPU TEMPERATURE TO BE RUNNING!-- 
# 
import clr 
clr.AddReference('System.Management') 
from System.Management import (ManagementScope, ManagementObject, ManagementObjectSearcher, WqlObjectQuery) 

scope = ManagementScope("root\CPUThermometer") 

searcher = ManagementObjectSearcher(scope, 
    WqlObjectQuery("SELECT * FROM Sensor Where SensorType LIKE 'Temperature'"), None) 

mo = ManagementObject() 

print "\n" 
print "    Temp  Min  Max" 

strout = str(' ') 

for mo in searcher.Get(): 
    strout = '{0} {1} C {2} C {3} C\n{4}'.format(mo["Name"], mo["Value"], mo["Min"], mo["Max"], strout) 

print strout 

Output di esempio:

D:\IronPython 2.7>ipy64 c:\users\neamerjell\desktop\test.py 


       Temp  Min  Max 
CPU Core #1 21.0 C 20.0 C 37.0 C 
CPU Core #2 23.0 C 21.0 C 39.0 C 
CPU Core #3 21.0 C 20.0 C 32.0 C 
CPU Core #4 21.0 C 20.0 C 36.0 C 

ho scoperto nel modo più duro che la query non è SQL abbastanza standard e non piace l ' "Ordine By" clausola, così ho dovuto fare qualche stringa di fantasia formattazione per ottenere l'ordine corretto in quanto la query restituisce i nuclei in ordine inverso. Questo mi ha sconcertato per un po 'fino a quando non ho escogitato questo modo di aggirarlo.