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ý -- ———————————————————————————————————————————————————————————————— regn...@seznam.cz regn...@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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python