Операция печати 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/тест
∞