>nefunguje ani takovyto obycejny priklad: > >t = file('blabla.txt', 'a+') >t.write("Lorem ipsum dolor sit amet") >print t.read() >t.close() > >Ocekaval jsem, ze se vypise prazdny retezec (vzhledem k tomu, ze se >snazim cist na konci souboru). Tento priklad ale opakovane a bez >vyjimky do konzole vypise nekolik kB binarnich dat, mezi kterymi >dokazu identifikovat napriklad jmena ostatnich souboru v aktualnim >adresari - predpokladam, ze mi python zobrazil cast surovych dat >filesystemu.
Můžu potvrdit stejné chování s Python 2.6.5 na Windows Vista. >t = file('blabla.txt', 'a+') >t.write("Lorem ipsum dolor sit amet") >t.seek(0) >print t.read() >t.close() > >V teto verzi jsem pridal pred read seek. Zde bych ocekaval, ze print >vypise tentyz text, ktery jsem do souboru zapsal. Skript ale vypise >vyjimku IOError: [Errno 9] Bad file descriptor Tohle mi funguje pod Vistama s Python 2.6.5 i s Python 2.7. On to ale asi není "obyčejný příklad". Problém je asi v tom a+ režimu (stejně se to chová i při w+) a v současném použití .read(). Dokumentace říká: Note: This function is simply a wrapper for the underlying fread() C function, and will behave the same in corner cases, such as whether the EOF value is cached. To znamená, že to může mít co do činění s použitím vyrovnávacího bufferu, který může být v Linuxu a pod Windows obsluhován jinak a díky fread() a zmíněným hraničním případům se to tedy může jinak chovat. Zkus tohle: t = open('blabla.txt', 'a+', buffering=0) t.write("Lorem ipsum dolor sit amet") ## t.seek(0) print t.read() t.close() Jde o přidání parametru buffering=0. Poznámka: Pro otvírání souboru by se měla používat funkce open() a ne file(). V Python 3 file() neexistuje. Petr _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python