Иногда в программах появляются проблемы с кодировками, чаще всего это связано с выводом unicode, и вы можете получить ошибку наподобие "UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)". Одно из решений - подменить stdout.
Ниже пример подмены stdout.
# coding: utf8
import sys
class StdOutWrapper(object):
def __init__(self, active=True):
self.active = active
self.std = sys.stdout
sys.stdout = self
def write(self, *args):
if not self.active:
return
for i in args:
if isinstance(i, unicode): i = i.encode('utf8')
elif not isinstance(i, str): i = repr(i).encode('utf8')
self.std.write(i)
def flush(self):
if not self.active:
return
self.std.flush()
def main():
StdOutWrapper()
print 'test latin'
print 'Проверка кириллицы, utf8!!!'
print u'test latin'
print u'Проверка кириллицы, unicode!!!'
print ['Про', u'верка!']
if __name__ == '__main__':
main()