¿Sacar temperatura por python en windows?

Hola muy buenas!

Estoy haciendo una pequeña aplicación de monitorización de equipos, carga de cpu, procesos, bueno un poco de todo, la aplicación es compatible con windows y linux pero el problema que tengo es que con windows no consigo sacar temperaturas! (windows 7 x64) en linux uso pysensors y va mas que perfecto.

En windows lo intenté con wmi y no lo conseguí, alguna idea?

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


y ...

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


no valió de mucho, a ver si podéis ayudarme un poquito.

Un saludo!
Yo medía las temperaturas de los discos duros así:

import wmi


def hdd_temp():
    TEMPATTR = 194 # the number of the temperature attribute

    c = wmi.WMI(namespace='root/wmi')

    for drive in c.MSStorageDriver_ATAPISmartData():
        # strip out parts of the name to make it more readable.
        driveName = drive.InstanceName.split('_')[1]
       
        # The first byte of the array is the number of 12-byte 'blocks' it contains.
        blockNum = drive.VendorSpecific[0]
       
        # Split the rest of the array into blocks.
        vs = drive.VendorSpecific[1:]
        blocks = [vs[i*12:i*12+12] for i in xrange(blockNum)]
       
        # Find the temperature block for each drive and print the value.
        print driveName + ':',
        for block in blocks:
            if block[1] == TEMPATTR:
                print str(block[6]) + unichr(176).encode("cp850") + 'C'
                return str(block[6])
                break

hdd_temp()


Y sí, tienes que usar wmi, pero no me preguntes mucho más, que no me acuerdo de mucho [+risas] A mí me ayudaron bastante en stackoverflow, por si te sirve.
Korso10 escribió:Yo medía las temperaturas de los discos duros así:

import wmi


def hdd_temp():
    TEMPATTR = 194 # the number of the temperature attribute

    c = wmi.WMI(namespace='root/wmi')

    for drive in c.MSStorageDriver_ATAPISmartData():
        # strip out parts of the name to make it more readable.
        driveName = drive.InstanceName.split('_')[1]
       
        # The first byte of the array is the number of 12-byte 'blocks' it contains.
        blockNum = drive.VendorSpecific[0]
       
        # Split the rest of the array into blocks.
        vs = drive.VendorSpecific[1:]
        blocks = [vs[i*12:i*12+12] for i in xrange(blockNum)]
       
        # Find the temperature block for each drive and print the value.
        print driveName + ':',
        for block in blocks:
            if block[1] == TEMPATTR:
                print str(block[6]) + unichr(176).encode("cp850") + 'C'
                return str(block[6])
                break

hdd_temp()


Y sí, tienes que usar wmi, pero no me preguntes mucho más, que no me acuerdo de mucho [+risas] A mí me ayudaron bastante en stackoverflow, por si te sirve.

ese código devuelve un error, al menos a mi:

...
wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147217396, 'OLE error 0x8004100c', None, None>>


Alguna idea?

Edit:

Aun que sea otro idioma daría igual, se puede ejecutar el exe externo y capturar los datos no?
2 respuestas