ラズパイ:起動時に実行するプログラムで日本語全角文字を使うときは注意しよう

Raspberry Pi

これまでに何度も悩まされた。
ラズパイのコンソールから実行したときは問題なく実行できるのに、同じプログラムを起動時に実行するプログラムとして設定すると動かない。

そのプログラム、日本語全角文字列をコンソール上に表示していませんか?

例えば、hoge.pyというPythonスクリプトを起動時に実行させるため、/etc/rc.localファイルに次のように記述したとする。

sudo python3 /home/pi/hoge.py&

hoge.pyの中身はこうだ。(プログラムはあくまで例だが、タクトスイッチを押した時に表示が変化するプログラムのようなものだと考えて欲しい)

1import RPi.GPIO as GPIO
2import time
3 
4pin = 19
5GPIO.setmode(GPIO.BOARD)
6GPIO.setup(pin, GPIO.IN)
7 
8# ボタン待機待ち
9while True:
10    command = input("Enter:Read pin / Q:quit : ")
11    if command.upper() == ("Q"):
12        break
13    level = GPIO.input(pin)
14    print("状態 = ", level)
15    time.sleep(0.1)
16 
17GPIO.cleanup()

14行目のprint文で全角文字の「状態」という日本語全角文字を使っているためエラーとなってしまう。
結果、プログラムは強制終了となる。

ちなみに8行目でもコメント文に「ボタン待機待ち」の日本語全角文字があるが、これはあくまでコメント文で実行はスルーされるため問題ない。

原因は、ラズパイ起動時にデフォルトでラテン文字の言語設定になっているからだ。

結論としては、起動実行前の/etc/rc.localなどの先頭に言語を日本語のUTF-8に設定する記述

export LANG=ja_JP.UTF-8

を入れると問題なく動作するようになる。

イメージとしてはこんな感じだ。

export LANG=ja_JP.UTF-8
sudo python3 /home/pi/hoge.py&

/etc/rc.local

コメント

タイトルとURLをコピーしました