Dne 22.3.2011 14:38:22 napsal zu1234:
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
Děkuji za krásné uvedení do problému!!
K obsluze kódování na výstupu z programů
jsem začal používat codecs.getwriter(...)
jak mi zde bylo poraděno.
Pod windows mi to například umožňuje nastavit
stdout (který jde do souboru) na cp1250
a strerr (který jde na terminál) na cp852.
Je to dobré
Ať se na to díváš jak chceš, vždycky někde nastane nějaká
komplikace. Problém je v tom, že string v Pythonu 2.x je posloupnost
bajtů a informace o kódování u toho není zachycena.
Nakonec jsem dospěl k tomu, že je nutné používat unicode řetězce
(i v Pythonu 2). Zatím to může být v reálném
1) O verzi pythonu nerozhoduji já, ale
tvůrci knihoven typu pymssql aj.
2) Ani když nepoužiju string, ale unicode
tak se problém neodstraní, chybová hláška není kompletní:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import codecs
sys.stderr = codecs.getwriter('cp852')(sys.stderr)
Ehm, když už jsme u té práce s terminálem, zná někdo nějaký modul na
vytváření oken v terminálu? Mám na mysli něco lehce použitelného, vím že je
tu urwid a ty curses ale obojí mi to přijde dost neohrabané. Asi
nejpoužitelnější mi přijde python-dialog ale ten zase neposkytuje moc věcí a
vypadá to