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

Filip Štědronský regnarg na seznam.cz
Úterý Duben 19 12:30:10 CEST 2011


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 souboru:
>     sys.setdefaultencoding('cp1250')
> 
> print u'šílené'

Ahoj,
tohle všechno je způsobeno tím, že funkce setdefaultencoding
není tak úplně určena pro uživatele. Při startu Pythonu se 
automaticky importuje modul site.py, který se stará o všechny
možné druhy nastavení a inicializací a který je podle potřeby
možné přizpůsobit podle potřeb cílové platformy a/nebo 
administrátora. Tam se mimo jiné volá funkce setdefaultencoding
s nějakou hodnotou, kterou to považuje za "rozumnou" pro dané
prostředí (v linuxu se to snaží uhodnout podle locale, na oknech
to nejspíš bude vždy ascii). A poté, co to udělá, prostě funkci
setdefaultencoding z modulu sys smaže (aby si s ní nehráli 
programátoři --- neboť v dobré víře je nastavení kódování 
považováno za věc prostředí, do které Pythoní program, kterýžto
by měl být na prostředí nezávislý, nemá co mluvit). Reloadem
se sys vrátí do původního stavu, tedy včetně metody, kterou
původně site smazal. Pro podrobnější informace doporučuji projít
site.py někde v knihovních adresářích pythonu.

Snad to dává aspoň trochu smysl
Filip Štědronský


-- 
————————————————————————————————————————————————————————————————
regnarg na seznam.cz  regnarg na jabber.cz  http://regnarg.ofight.org/
"V upřímné lásce nezáleží na tom, jak úžasného člověka potkáte;
důležité je, aby vám spolu bylo fajn." --anonym


Další informace o konferenci Python