2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

ググればすぐ出てくるが備忘録としてメモ。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 環境変数を変更するべき、という理解で合っているのだろうか。

めでたしめでたし(?)

参照元

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?