оператор печати python с использованием utf-8 и nohup - PullRequest
15 голосов
/ 12 апреля 2011

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

nohup python2.7 myProgram.py &

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

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

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

1 Ответ

19 голосов
/ 12 апреля 2011

Использовать 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 / test :

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 / test :

...