Есть ли веская причина, почему я не должен запускать все мои программы python с этим? Есть ли что-то особенное, потерянное при выполнении exec вроде этого?
#!/usr/bin/python
import os, sys
if sys.stdout.encoding == None:
os.putenv("PYTHONIOENCODING",'UTF-8')
os.execv(sys.executable,['python']+sys.argv)
print sys.stdout.encoding
Есть 60 вопросов о PYTHONIOENCODING, поэтому я предполагаю, что это общая проблема, но если вы этого не знаете, это делается, потому что, когда sys.stdout.encoding == None
, тогда вы могут печатать только символы ascii, поэтому, например, print "åäö"
выдаст исключение..
EDIT Это происходит со мной, когда stdout - это труба; python encoding.py|cat
установит кодировку в None
Другим решением является изменение кодека stdout sys.stdout = codecs.getwriter('utf8')(sys.stdout)
, который, как я предполагаю, является правильным ответом, рассылает комментарии по этому вопросу.