Pytanie:
Jak bezpośrednio uzyskać temp procesora w Pythonie?
SDsolar
2018-06-28 11:22:48 UTC
view on stackexchange narkive permalink

Celem jest przełączenie wentylatora wyciągowego na zewnętrznej stacji rejestracji danych w elektrowni słonecznej. Program do zbierania danych jest napisany w Pythonie pod Raspbian.

Do odczytu temp procesora w wierszu poleceń służy polecenie vcgencmd .

Przykład w bash:

  echo "Procesor ma temperaturę $ (vcgencmd measure_temp) stopni." Procesor ma temp = 39,2'C stopni.  

jako polecenie zwraca ciąg „temp = 39,2'C”

Osobiście nigdy nie widziałem, żeby to się nie powiodło, chociaż wiem, że jest pytanie dotyczące tego punktu.

vcgencmd measure_temp nie zawsze działa

Tymczasem chciałbym uzyskać temp procesora w Pythonie.

Powrót do celu: wentylatory są kontrolowane przez wywołania PiGPIO , a podczas rejestracji danych ograniczam liczbę wywołań z systemu zewnętrznego do minimum (tj. nie ma żadnych inne niż we / wy pliku Python). Byłoby też o wiele lepiej otrzymać odpowiedź jako prostą wartość zmiennoprzecinkową niż wyodrębnić ją z ciągłego powrotu.


Pytanie brzmi: jak bezpośrednio uzyskać temp procesora w Pythonie?

Sześć odpowiedzi:
hg8
2019-01-20 20:24:13 UTC
view on stackexchange narkive permalink

Dla tych, którzy przyjeżdżają tutaj z Google. Możesz pobrać tymczasowy procesor Raspberry w Pythonie za pomocą pakietu gpiozero .

  pip install gpiozero  

Utwórz swój temp.py

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

Wyjście:

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

Najpierw skonfiguruj Pythona:

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

Poręczny skrypt bash cputemp

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

Przykładowe użycie w bash:

  echo "Procesor jest w $ (cputemp) stopniach C. "Procesor ma 39,6 stopnia C.  

Krótko i na temat oraz w zmiennym formacie danych do porównań w Program w Pythonie ..

Dobra odpowiedź. Czy to jest szybsze czy wolniejsze niż `os.popen ('vcgencme measure_temp')`?
Milliways
2018-06-28 11:29:14 UTC
view on stackexchange narkive permalink

„W przypadku rozciągania w ogóle nie ma polecenia vcgencmd”. pm_start_logging, pm_stop_logging, wersja polecenia, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbiter, 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, plik "vcgencmd measure_temptemp = 4 2.9'C

Masz rację. Zmiana funkcji pytań i odpowiedzi, aby skupić się na języku Python.
tłumaczenie ... tak, vcgencmd jest rzeczywiście dostępny na Stretch, a tutaj są wszystkie dostępne argumenty.
uhoh
2018-06-28 12:16:39 UTC
view on stackexchange narkive permalink

Związane z innymi odpowiedziami:

Korzystając z przyjemnej odpowiedzi na Mniej brzydki, ale niezawodny sposób na znalezienie tej wartości zmiennoprzecinkowej osadzonej w ciągu bez padding?:

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

co zwraca zarówno wartość zmiennoprzecinkową i oryginalną wiadomość, w której jest zawarta.

  temperatura (° C): 49.0 pełna wiadomość: temp = 49,9'C  
uwaga `polecenia` to python2, zostało zastąpione przez` podproces`, chociaż są tu również inne rzeczy specyficzne dla py2.
@tedder42 dzięki za to! Spróbuję wkrótce to zrobić, ale możesz edytować to samodzielnie lub opublikować nową odpowiedź, jeśli masz na to ochotę. Zdaję sobie sprawę, że nadchodzi czas i wersja 2.7 nie będzie już obsługiwana, a my, osoby 2,7, musimy się przenieść, właśnie zwlekałem ... co przypomina mi, że nie zaakceptowałem jeszcze Twojej odpowiedzi w kosmosie ... . Gotowe!
Nadal nie chciałem zmieniać tego radykalnie. Myślę, że można to po prostu zostawić, zwłaszcza, że ​​i tak nie ma na to żadnego kanonicznego sposobu.
eftshift0
2018-07-01 09:27:41 UTC
view on stackexchange narkive permalink

Odpowiedź została już udzielona i zaakceptowana, ale widzę, że nikt nie poruszył tej alternatywy, która nie zależy od uruchomienia polecenia, ale raczej od odczytu z pliku: / sys / class / Thermal / Thermal_zone0 / temp .

Ten plik zawiera temperaturę w milli-stopniach Celsjusza.

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

Więc otwórz plik i przeczytaj jego zawartość. Nie ma potrzeby przetwarzania napisów.

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

W witrynie RPi Foundation znajduje się przewodnik dotyczący sporządzania dziennika temperatury. Znajdują się w nim instrukcje dotyczące biblioteki GPIO Python wbudowanej w Raspbian. https://projects.raspberrypi.org/en/projects/temperature-log

[Wraca] (https://projects.raspberrypi.org/en/projects/temperature-log/4) na to samo, co odpowiedź udzielona przez @hg8 tj. `Pip install gpiozero` i` from gpiozero import CPUTemperature`, aby uzyskać temp. .


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...