Pythonでコマンドを呼出す ラズパイで電光掲示板 part6

シェアする

Pocket

1.pythonでコマンド呼出し

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

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

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

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

2.サンプル作成

早速やってみました。

xxxxxxx@raspbian:~ $ cat test_com.py
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

調子に乗って、プログラムの引数を追加して実行したらエラー発生です。

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 <module>
 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

3.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

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

結果はご覧の通りです。

ニュースを電光掲示板に流す(part5)はこちら。

ニュースの見出しと本文で電光掲示板の表示形式を変えてみる(part7)はこちら。

スポンサーリンク

シェアする

フォローする