ラズパイ:PythonからCPU温度の数値のみ取り出す

ラズベリーパイのロゴ Raspberry Pi
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」などの数値のみ取得できる。

コメント

タイトルとURLをコピーしました