python print z utf-8 i nohup

Mam jakiś kod Pythona, który drukuje wiadomości dziennika. Po uruchomieniu z linii poleceń, działa dobrze z utf-8. Komunikaty dziennika zawierające znaki specjalne są wyświetlane w porządku. Jednak, gdy uruchamiany jest w tle pod nohupem, zmienia się na znaki utf-8.

nohup python2.7 myProgram.py &

Błąd, który widzę, to zwykły błąd "spróbuj zakodować utf w ascii":

UnicodeEncodeError: kodek 'ascii' nie można zakodować znaku u '\u2013 ' w pozycja 71: ordinal not in range(128)

I Załóżmy, że to dlatego, że nohup sygnalizuje pythonowi, że nie ma normalnego terminala, więc domyślnie jest to ASCII. Czy jest jakiś sposób, aby powiedzieć nohupowi, aby działał z włączonym utf-8 lub skonfigurować to tak, aby znaki utf-8 nie powodowały awarii podczas pracy pod nohupem w tle?

Author: MByD, 2011-04-12

1 answers

Użyj PYTHONIOENCODING :

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

Na przykład, jeśli

MyProgram.py :

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

Then running

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

Produkuje

/tmp / test :

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

While

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

Produkuje

/tmp / test :

 18
Author: unutbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-11 20:35:39