Pregunta:
¿Cómo obtener directamente la temperatura de la CPU en Python?
SDsolar
2018-06-28 11:22:48 UTC
view on stackexchange narkive permalink

El objetivo es cambiar un extractor de aire en una estación de registro de datos exterior en una estación de energía solar. El programa de recopilación de datos está escrito en Python bajo Raspbian.

Para leer la temperatura de la CPU en una línea de comandos, existe el comando vcgencmd .

Ejemplo en bash:

  echo "La CPU está en $ (vcgencmd measure_temp) grados." La CPU está en temp = 39.2'C grados.  

como el El comando devuelve la cadena "temp = 39.2'C"

Personalmente, nunca he visto este error, aunque sé que hay una pregunta sobre ese punto.

vcgencmd measure_temp no siempre funciona

Mientras tanto, me gustaría obtener la temperatura de la CPU en Python.

De vuelta a la meta: los ventiladores son controlados por llamadas PiGPIO , y durante el registro de datos mantengo mis llamadas al sistema externo al mínimo (es decir, no hay ninguna que no sea la E / S de archivos de Python). Además, sería mucho preferible obtener la respuesta como un valor de punto flotante simple que extraerla de una cadena de retorno.


La pregunta es: ¿Cómo obtener directamente la temperatura de la CPU en Python?

Seis respuestas:
hg8
2019-01-20 20:24:13 UTC
view on stackexchange narkive permalink

Para aquellos que vienen aquí desde Google. Puede obtener la temperatura de la CPU Raspberry en Python usando el paquete gpiozero .

  pip install gpiozero  

Cree su temp.py

  de gpiozero import CPUTemperaturecpu = CPUTemperature () print (cpu.temperature)  

Salida:

  $ python temp.py56.92  
SDsolar
2018-06-28 11:22:48 UTC
view on stackexchange narkive permalink

Primero, configure Python:

  pip install setuptoolssudo pip install git + https: //github.com/nicmd/vcgencmd.git  

Práctico bash script cputemp

  (shebang) / usr / bin / pythonimport vcgencmdCPUc = vcgencmd.measure_temp () print str ( CPUc) chmod + x cputempsudo cp cputemp / usr / bin  

Ejemplo de uso en bash:

  echo "La CPU es a $ (cputemp) grados C. "La CPU está a 39,6 grados C.  

Breve y al grano, y en el formato de datos flotantes para comparaciones dentro del Programa Python ...

Buena respuesta. ¿Es esto más rápido o más lento que `os.popen ('vcgencme measure_temp')`?
Milliways
2018-06-28 11:29:14 UTC
view on stackexchange narkive permalink

"En Stretch no hay ningún comando vcgencmd".

Entonces, ¿qué es

  vcgencmd commandscommands = "vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, vctest_memmap, vctest_start, vctest_stop, vctest_start, pm_get_policytus, pm_get_test, pm_start_logging, pm_stop_logging, versión, comandos, set_vll_dir, set_backlight, set_logging, get_lcd_info, árbitro, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, GET_CONFIG, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, Schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, hdmi_cvt, hdmi_timings, archivo "vcgencmd measure_temptemp = 4 2.9'C  
Estás en lo correcto. Cambio de preguntas y respuestas para centrarse en Python.
traducción ... sí, el vcgencmd está disponible en Stretch, y aquí están todos sus argumentos disponibles.
uhoh
2018-06-28 12:16:39 UTC
view on stackexchange narkive permalink

Relacionado con las otras respuestas:

Usando la buena respuesta a Una forma menos fea pero confiable de encontrar este valor de punto flotante incrustado dentro de una cadena sin padding?:

  import re, commandsdef check_CPU_temp (): temp = None err, msg = commands.getstatusoutput ('vcgencmd measure_temp') si no es err: m = re.search (r '-? \ d \.? \ d *', msg) # https://stackoverflow.com/a/49563120/3904031 try: temp = float (m.group ()) excepto: pass return temp, msgtemp , msg = check_CPU_temp () print "temperature (" + u '\ xb0' + "C):", tempprint "full message:", msg  

que devuelve un valor de punto flotante y el mensaje original en el que está contenido.

  temperatura (° C): 49.0 mensaje completo: temp = 49.9'C  
nota que `commands` es python2, se ha reemplazado por` subprocess`, aunque también hay otras cosas específicas de py2 aquí.
@tedder42 gracias por eso! Intentaré atender esto pronto, pero puedes editarlo tú mismo o publicar una nueva respuesta si te apetece. Soy consciente de que se acerca el momento y 2.7 ya no será compatible y nosotros 2.7ers tenemos que trasladarnos, solo he estado postergando ... lo que me recuerda que aún no había aceptado su respuesta de Space ... . ¡hecho!
Yo era / todavía soy reticente a cambiarlo dramáticamente. Creo que está bien dejarlo, especialmente porque de todos modos no hay una forma canónica de hacerlo.
eftshift0
2018-07-01 09:27:41 UTC
view on stackexchange narkive permalink

Ya ha sido respondida y aceptada pero veo que nadie ha planteado esta alternativa que no depende de ejecutar un comando sino de leer de un archivo: / sys / class / Thermal / Thermal_zone0 / temp .

Este archivo contiene la temperatura en mili-grados Celsius.

  $ vcgencmd measure_temp && cat / sys / class / Thermal / Thermal_zone0 / temptemp = 47.8'C47774  

Entonces, abra el archivo y lea el contenido. No es necesario procesar cadenas.

Unknown Name
2018-07-05 06:05:23 UTC
view on stackexchange narkive permalink

En el sitio de la Fundación RPi, hay una guía sobre cómo hacer un registro de temperatura. En él hay instrucciones sobre la biblioteca GPIO Python integrada en Raspbian. https://projects.raspberrypi.org/en/projects/temperature-log

Se [vuelve] (https://projects.raspberrypi.org/en/projects/temperature-log/4) a la misma respuesta dada por @hg8, es decir, `pip install gpiozero` y` from gpiozero import CPUTemperature` para obtener la temperatura .


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 4.0 bajo la que se distribuye.
Loading...