Pythonでコマンドを呼出しニュースを電光掲示板に表示 ラズパイで電光掲示板 part6
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から呼出してみるということを主体に実施してみました。
思いのほか容易に実施できました。
※気づけば電光掲示板の記事も増えてきました
ディスカッション
コメント一覧
まだ、コメントがありません