Pythonでコマンドを呼出しニュースを電光掲示板に表示 ラズパイで電光掲示板 part6

2017年10月11日

part4で天気予報、part5でニュースを電光掲示板人表示しましたが、これらは、シェルを使用していました。

天気予報では、pythonでプログラムを書きましたが、シェルで使用していたコマンドをpythonから呼出して、実施できるか調査しました。

すると、簡単にできるのですね。以下の記事に乗ってます。

python上でunixコマンドを実行する

今回は、これを使用して、Pythonでコマンドを呼出しニュースを電光掲示板に表示してみます。

スポンサーリンク

サンプル作成

まずは、サンプルを作成します。

ls コマンドを発行し print するプログラムです。

import subprocess
res = subprocess.call('ls')
#=> lsコマンドの結果
print(res)
#=> コマンドが成功していれば 0

実行してみましょう。

xxxxxxx@raspbian:~ $ python3 test_com.py
jikan_file.py tenki_out_gif.py test_com.py txt_print.py
tenki_file.py tenki_out.py test.py
0

ls コマンドが発行され、その結果が表示されました。

それでは、コマンドに引数を追加してみます。

import subprocess
res = subprocess.call('ls -la')
#=> lsコマンドの結果
print(res)
#=> コマンドが成功していれば 0

実行したらエラー発生です。

xxxxxxx@raspbian:~ $ python3 test_com.py
Traceback (most recent call last):
File "test_com.py", line 2, in 
res = subprocess.call('ls -la')
File "/usr/lib/python3.4/subprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.4/subprocess.py", line 859, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.4/subprocess.py", line 1457, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'ls -la'

call文では、引数が書けないようです。

さっきの記事を見たら、ちゃんと書いてありました。きちんと記事を読んでから、やらんといかんですな。

コマンドに引数を加えて実行するは、subprocess.call(*args)を使わねばなりません。

下記のように、ls と -la を args にセットして、命令を発行してやります。

import subprocess
args = ['ls', '-la']
try:
res = subprocess.check_call(args)
except:
print ("Error.")

すると、引数をしっかり理解して、コマンドを発行できました。

xxxxxxx@raspbian:~ $ python3 test_com.py
total 40
drwxr-xr-x 2 pi pi 4096 Jul 31 19:49 .
drwxr-xr-x 25 pi pi 4096 May 3 18:13 ..
-rw-r--r-- 1 pi pi 1749 Apr 19 2018 jikan_file.py
-rw-r--r-- 1 pi pi 3323 Apr 11 2018 tenki_file.py
-rw-r--r-- 1 pi pi 3898 Apr 10 2018 tenki_out_gif.py
-rw-r--r-- 1 pi pi 4141 Apr 10 2018 tenki_out.py
-rw-r--r-- 1 pi pi 105 Jul 31 19:49 test_com.py
-rw-r--r-- 1 pi pi 315 Apr 11 2018 test.py
-rw-r--r-- 1 pi pi 1433 Apr 9 2018 txt_print.py

convert発行のテスト

これで、convertが発行できるか試します。

それぞれの単語をひとつずつ区切って、args にセットします。そして、命令を発行すればいいのですね。

import subprocess
args = ['convert', '-background', 'black', '-fill', 'white', '-font', '/usr/share/fonts/truetype/fonts-japanese-gothic.ttf', '-pointsize', '16', 'label:@/home/pi/2news.txt', '3news.jpg']
try:
res = subprocess.check_call(args)
except:
print("Error.")

もろ、convert分を分解しただけですね。
さて、実行すると、とりあえず、正常終了したようです。

pi@raspberrypi:~ $ python3 convert.py
pi@raspberrypi:~

出来上がった、jpgファイルを見てみると、以下のようになっています。

pi@raspberrypi:~ $ ls -l *news*
-rw-r--r-- 1 pi pi 260032 9月 5 21:38 2news.jpg
-rw-r--r-- 1 pi pi 218496 9月 7 12:10 3news.jpg

前回作成したものより、小さくなっていますね。どうやら、前回は、背景を白、文字色を黒にしたのに対し、今回は、背景を黒、文字色を白にしたためかと思います。

結果はご覧の通りです。

何とかうまく表示できたようですね。

最後に

ラズパイで電光掲示板の記事もpart6となりました。

今回の記事では、Pythonでコマンドを呼出して、ニュースを電光掲示板に表示することにチャレンジしました。

シェルで使用していたコマンドをpythonから呼出してみるということを主体に実施してみました。

思いのほか容易に実施できました。

※気づけば電光掲示板の記事も増えてきました

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

電光掲示板

Posted by 60爺