Help us understand the problem. What is going on with this article?

RaspberryPiのCPU情報をPythonで取得する

More than 3 years have passed since last update.

開発環境

HD RaspberryPi B+
OS Raspbian GNU/Linux 8.0 (jessie)
Python ver 2.7.9

動機

RaspberyPi にはvcgencmd commandsという、RaspberyPiの内部情報を取得してくれる簡単なコマンドがあります。

RPI vcgencmd usage

RPI vcgencmd commands Means
vcgencmd measure_temp CPU温度
vcgencmd measure_clock arm PythonCPU周波数
vcgencmd measure_voltsp 電圧取得
vcgencmd get_mem arm CPU(arm)メモリ使用量
vcgencmd get_mem gpu GPU(gpu)メモリ使用量

以前はこれをshellで書いていたのですが、Pythonの方が後々のグラフ作図と相性がいいので、Pythonで外部コマンドを実行できるように書いてしまおうと、言う感じで始めました。

ソースコード

#!/usr/bin/env python$
#coding:utf-8$

#ライブラリをインポートしてくる。$
import os
import commands

#Raspbianの制御コマンド(vcgencmd)を実行$

#温度を取得するRPiコマンド
temp = commands.getoutput("vcgencmd measure_temp").split('=')
print temp[1]

#CPU周波数を取得
clock=commands.getoutput("vcgencmd measure_clock arm").split('=')
print clock[1]

#電圧を取得
volt=commands.getoutput("vcgencmd measure_volts").split('=')
print volt[1]

#CPU(arm),GPUのメモリ使用量
arm=commands.getoutput("vcgencmd get_mem arm").split('=')
print arm[1]

gpu=commands.getoutput("vcgencmd get_mem gpu").split('=')
print gpu[1]

実行結果

38.5'C
700000000
1.2000V
448M
64M

ソースコード解説

外部コマンドをPythonから実行するのがgetoutput()です。getoutput()は、コマンドを実行した結果のみを返します。getoutput()を使用する場合はcommandsモジュールをimportしてきて下さい。

import commands
commands.getoutput('ls')

str.split(sep)はsepを区切り文字として、単語を分割してリストにするメソッドです。区切り文字が指定されない場合は、スペース、タブ、改行文字列で分割される特殊なルールになる事があります。
今回の場合は=で区切っています。理由はsplitを使わないで実行すると

temp = commands.getoutput("vcgencmd measure_temp")
print temp

実行結果

temp=37.9'C

今回、グラフで使用する場合、使いたいのは数値だけなのでtempは余計です。
split('=')で文字を区切ります。

temp = commands.getoutput("vcgencmd measure_temp").split('=')
print temp

実行結果

['temp', "38.5'C"]

この様にリストとして区別してくれるので、後は添字を指定して数値部分だけ、抜き出して表示します。尚、この時区切られた後の値はstr型なので数値として扱う場合はint()で文字列を数値に変換して下さい。

temp = commands.getoutput("vcgencmd measure_temp").split('=')
temp_i = int(temp[1])

参考資料

RaspberryPi(Raspbian)のCPUの温度をcatを使わないで取得してみた
pythonで外部のシェルスクリプトやコマンドを実行する方法
文字列の分割・結合 split, join,rsplit

Fendo181
Enduです。PHPとJavaScriptを書いてご飯食べてます。
https://scrapbox.io/fendo181/profile
pepabo
「いるだけで成長できる環境」を標榜し、エンジニアが楽しく開発できるWebサービス企業を目指しています。
https://pepabo.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away