vcgencmd measure_temp
というコマンドをターミナルから実行すると
temp=44.4'C
などとCPU温度が表示される。
ただし 44.4 の数値部分のみ欲しい。
Pythonスクリプト
showCpuTemp.py
#!/usr/bin python3
# -*- coding: utf-8 -*-
"""
ラズパイ(Raspberry Pi)でCPU温度の数値のみ取り出す
2021-08-29
python 3.5.3
OS: Raspbian 9.13 stretch(Raspberry PiB Plus)にて確認
"""
import subprocess
import re
"""
CPU温度を表示する
"""
# CPU温度を表示するコマンド
cmd = "vcgencmd measure_temp"
# Pythonからシェル呼び出し
temp = subprocess.check_output(cmd.split()) # ex) b"temp=44.4'C\n"
# 文字列として取得
temp = temp.decode("utf-8") # ex) temp=44.4'C
# 余計な文字を削除して数値部分を取り出す
temp = re.sub("temp=|'C|\n", "", temp) # ex) 44.4
# 整形して表示
print("ラズパイの体温は {}℃です".format(temp))
実行イメージ
ラズパイの体温は 44.4℃です
解説
シェルコマンドをPythonから呼び出すには subprocessモジュールが必要。
import subprocess
subprocess.check_output を使うと戻り値がシェルの実行結果となる。
temp = subprocess.check_output(cmd.split())
この場合、tempにはターミナルから実行したときのような「temp=44.4’C 」という文字列(string)ではなく「b”temp=44.4’C\n”」などというバイトリテラル(bytes)が返ってきてしまうため、デコードが必要。
temp = temp.decode("utf-8")
これで変数tempには、「temp=44.4’C」という文字列が得られる。
数値部分が欲しいため、「temp=」と「‘C」を消去したい。あと文字列の最後に「\n」(改行)が入っているためこれも消去したい。
re.subを使って対象の文字「temp=」「’C」「\n」を空欄に置換する。
temp = re.sub("temp=|'C|\n", "", temp)
これで変数tempには、「44.4」などの数値のみ取得できる。
コメント