Добрый день. Имеем скрипт в кодировке utf-8. Он динамически подгружает плагины. Имеем в классе свойство __charset = 'utf-8' по умолчанию. При инициализации класса, если аргумент encoding не None, то меняем self.__charset = 'utf-8' на self.__charset = encoding. Вот как-то так:
def __init__(self, path = None, encoding = None):
if not encoding is None:
self.__charset = encoding
reload(sys)
sys.setdefaultencoding(self.__charset)
sys.stdout = codecs.getwriter(self.__charset)(sys.stdout)
print self.__charset
Так вот если запускать скрипт щелчком, то кодировка у нас utf-8 и кириллица выводится нормально. Но если запустить из командной строки, то кодировка cp866 (передаем ее в конструктор) и кириллица выводится кракозябрами. Я хз что можно сделать еще.
if len(sys.argv) > 1:
print "The program is run from the console."
print "Most likely there will be problems with the encoding of messages output, since the script was written in utf-8 encoding."
continued = raw_input("Do you want to continue? Y/N ")
if continued and continued.upper() == 'Y':
grunt = PyGrunt(sys.argv[1], encoding = 'cp866')