これまでに何度も悩まされた。
ラズパイのコンソールから実行したときは問題なく実行できるのに、同じプログラムを起動時に実行するプログラムとして設定すると動かない。
そのプログラム、日本語全角文字列をコンソール上に表示していませんか?
例えば、hoge.pyというPythonスクリプトを起動時に実行させるため、/etc/rc.localファイルに次のように記述したとする。
sudo python3 /home/pi/hoge.py&
hoge.pyの中身はこうだ。(プログラムはあくまで例だが、タクトスイッチを押した時に表示が変化するプログラムのようなものだと考えて欲しい)
import RPi.GPIO as GPIO
import time
pin = 19
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.IN)
# ボタン待機待ち
while True:
command = input("Enter:Read pin / Q:quit : ")
if command.upper() == ("Q"):
break
level = GPIO.input(pin)
print("状態 = ", level)
time.sleep(0.1)
GPIO.cleanup()
14行目のprint文で全角文字の「状態」という日本語全角文字を使っているためエラーとなってしまう。
結果、プログラムは強制終了となる。
ちなみに8行目でもコメント文に「ボタン待機待ち」の日本語全角文字があるが、これはあくまでコメント文で実行はスルーされるため問題ない。
原因は、ラズパイ起動時にデフォルトでラテン文字の言語設定になっているからだ。
結論としては、起動実行前の/etc/rc.localなどの先頭に言語を日本語のUTF-8に設定する記述
export LANG=ja_JP.UTF-8
を入れると問題なく動作するようになる。
イメージとしてはこんな感じだ。
export LANG=ja_JP.UTF-8
/etc/rc.local
sudo python3 /home/pi/hoge.py&
コメント