Help us understand the problem. What is going on with this article?

nohupでpython2を実行した際にUnicodeEncodeErrorが発生する時は

More than 1 year has passed since last update.

ググればすぐ出てくるが備忘録としてメモ。2018年にもなってPython2を使うのはどうかと思うが、時間のかかる集計処理などをnohupで実施するケースが稀にあるかと思う。

その際、場合によっては以下のようなエラーが発生する。

nohup some_script.py &
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-12: ordinal not in range(128)

解決策として、 PYTHONIOENCODING=utf-8 を環境変数に設定すると良い。

なぜこのようなことが起こるのか

sys.stdout.encoding を確認してみる。

import sys
print(sys.stdout.encoding)

まずは普通に実行 (LANG=en_US.UTF-8)

$ python encoding.py 
UTF-8

nohupで実行してみると、None になる。(一瞬で終わるため、バックグラウンドで実行していないのはご容赦ください)

$ nohup python encoding.py 
nohup: ignoring input and appending output to ‘nohup.out
$ cat nohup.out
None

http://www.macfreek.nl/memory/Encoding_of_Python_stdout を読むと、

However, when the output is piped to a file or to a different process, the encoding is not defined, and defaults to 7-bit ASCII.

とあるので、 nohupはこの場合にあたり、asciiになるようだ。

したがって、プロセス実行前に sys.stdout.encoding を変更するために PYTHONENCODING 環境変数を変更するべき、という理解で合っているのだろうか。

めでたしめでたし(?)

参照元

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away