[python] Nastavení default kódování print-u (ještě jednou)

zu1234 zu1234 na seznam.cz
Úterý Březen 22 14:38:22 CET 2011


Omlouvám se za vadnou češtinu, zkusím to ještě jednou:
------------------------------------------------------

Měl jsem problém (takový docela základní) jak napsat program
pro windows command-line s výstupem na terminál,
nebo (po přesměrování výstupu) do souboru.

Po přesměrování výstupu do souboru se totiž obsah sys.setdefaultencoding 
změní na ascii a printy končí
chybou: 'ascii' codec can't encode characters

1) Vlastní nastavení - reload je nutný
2) Nastavení podle 'směru' výstupu: pokud je výstup přesměrován do 
souboru tak cp1250 jinak cp852'
3) Funguje to i po převodu do exe pomocí py2exe
4) Následně fungují správně i výstupy z optparse

Snad to někomu pomůže.

Ale mohl by mi někdo vysvětlit proč to nejde bez reload?

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
reload(sys)

if sys.stdout.isatty():
     # Výstup jde na terminál:
     sys.setdefaultencoding('cp852')
else:
     # Výstup jde do souboru:
    sys.setdefaultencoding('cp1250')

print u'šílené'


Další informace o konferenci Python