2010-07-16 19 views

Respuesta

2

Mira la biblioteca cputemp.

EDITAR: en Windows, es posible que pueda convertir este IronPython script que utiliza WMI con el pitón WMI library.

+0

Parece que no admite sistemas operativos Windows. –

+0

Me dice que mi hardware no es compatible:/ – rectangletangle

+0

Entonces, python probablemente no sea una buena opción de idioma para sus necesidades. –

3

Puede utilizar pywin32 para acceder a la API nativa de Windows. Creo que debería ser posible consultar la API de Windows para la temperatura de la CPU si el fabricante de su controlador de la placa principal registra un proveedor de datos WMI a través de su controlador. Asumiendo que este es el caso se podría descargar el pywin32 extensions y la Python WMI module mencionado en la respuesta por el ARS, y luego proceder de la siguiente manera:

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

En cuanto a la secuencia de comandos IronPython en respuesta ars' parece que hay otra manera de hazlo también, usando un objeto WMI diferente. Utilizando la misma API y el enfoque que podría intentar recibir el valor de la temperatura con

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

que al parecer debe devolver el valor de la temperatura en décimas de grados Kelvin, por lo tanto recibir el grado en grados Celsius supongo que acaba de dividir este valor por 10 y restar ~ 273.

+2

me sale el siguiente error con el primer código: Rastreo (llamada más reciente pasado): Archivo "", línea 244, en run_nodebug Archivo "", línea 3, en IndexError: índice de la lista de rango – rectangletangle

+0

Tengo un montón de errores (OLE/COM) cuando intento ambos enfoques. ¿Alguna idea de por qué podría ser? – Dan

0

El código ofrecido por eadmaster puede funcionar para CPUs antiguas que OpenHardwareMonitor ha sido programado para, pero tienen una CPU i7 6700K Skylake. OpenHardwareMonitor no ofreció ningún resultado para mí. Sin embargo, hay un tenedor de este programa llamado CPU Thermometer, que se basa en OpenHardwareMonitor cual hace reconocer mi CPU.

Al buscar cómo obtener las temperaturas de CPU a través de Python, cambié a IronPython para tener acceso al .Net framework y tener acceso fácil a otros datos de rendimiento, pero debería ser bastante fácil descubrir cómo retroceder Ajústelo para Python 2.7 (simplemente ejecute el Termómetro de la CPU en lugar de OpenHardwareMonitor y cambie su espacio de nombres a "root \ CPUThermometer"? ¿Podría ser así de simple?).

# 
# 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 

Ejemplo de salida:

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 

descubrí la manera dura que la consulta no es SQL bastante estándar y no le gusta la "Orden Por" cláusula, por lo que tuve que hacer un poco de hilo de fantasía formateo para obtener el orden correcto ya que la consulta devuelve los núcleos en orden inverso. Esto me desconcertó un poco hasta que lo ideé de esta manera.

Cuestiones relacionadas