Операция печати python с utf-8 и nohup

У меня есть код python, который печатает сообщения журнала. При запуске в командной строке он отлично справляется с utf-8. Журнальные сообщения, содержащие специальные символы, распечатываются в порядке. Тем не менее, при запуске в фоновом режиме в nohup, он задерживает символы utf-8.

nohup python2.7 myProgram.py &

Ошибка, которую я вижу, это обычная ошибка "попытаться закодировать utf в ascii":

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u2013' в позиция 71: порядковый номер не в диапазоне (128)

Я предполагаю, что это потому, что nohup сигнализирует python о том, что у него нет нормального терминала, поэтому по умолчанию используется ascii. Есть ли способ сказать nohup для запуска с включенным utf-8 или установить его таким образом, чтобы символы utf-8 не вызывали сбои при работе в nohup в фоновом режиме?

Ответы

Ответ 1

Используйте PYTHONIOENCODING:

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py &

Например, если

myProgram.py

unicode_obj=u'\N{INFINITY}'
print(unicode_obj)    

затем запустите

nohup python2.7 myProgram.py > /tmp/test &

производит

/TMP/тест

UnicodeEncodeError: 'ascii' codec can't encode character u'\u221e' in position 0: ordinal not in range(128)

а

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py > /tmp/test &

производит

/TMP/тест