[python] file.close
Hynek Fabian
hynek.fabian na firma.seznam.cz
Pátek Duben 27 16:51:44 CEST 2012
IMO python sám pozavírá otevřené soubory když garbage collector dělá
úklid a zavolá destruktory osiřelým file instancím.
Se zámky ti neporadím, to je wydláčtina :-) ale pokud chceš mít 100%
jistotu že nic nezůstane, můžeš aplikovat "NKVD algoritmus" neboli
zavřít pro jistotu všechny bez rozdílu:
for fd in range(0, os.sysconf_names.get("SC_OPEN_MAX", 1024)):
try:
os.close(fd)
except OSError, ex:
pass
Ovšem to bych použil jen v krajním případě, protože přijdeš i o stdout.
V každém případě bych se vyhnul hackům jako je atexit,
uklidit po sobě můžeš už v handleru výjimky, resp. ve finally bloku.
Pokud se chceš vyhnout opisování stále stejného bloku výjimky,
použij context manager. Jednoduchá varianta je ve file objektu už
zabudovaná:
with open("spam", "w") as f:
f.write("ham")
...
Zavření je takto automatické, i když vystřelí výjimka.
Napsat si vlastní kontext který soubor i smaže je trivka,
viz r.t.f.m. :-)
btw na dočasné soubory máme krásnou knihovnu tempfile.
On 04/27/12 16:14, zu1234 wrote:
> To snad není pravda!?!
> Už jsem doma, takže se nemohu podívat do zdroje,
> ale myslím že máte pravdu!
>
> Nicméně: domnívám se že Python sám po sys.exit() uzavře
> všechny otevřené soubory a tak uvolní zámky, které by
> bránili jejich smazání ve funkci pověšené na atexit.
>
> Ale proč tedy (oper. systém) ječí "Proces nemá
> přístup k souboru neboť jej využívá jiný proces:"?
>
> Myslím že problém je v tom že uvolnění zámků trvá windows-ům
> nějakou chvíli a požadavek na smazání přijde příliš rychle.
>
> Použil jsem time.sleep(5) před mazání a problémy se zámky
> se ztratili.
>
> Nebo máte lepší nápad?
>
> Příští týden budu pokračovat.
> Pro tento týden děkuji za reakce!
>
> ZU
>
>
> Dne 27.4.2012 14:43, Hynek Fabian napsal(a):
>>>> try:
>>>> FI.write(PART)
>>>> except:
>>>> FI.close
>>>
>>> chybejici zavorky jsou predpokladam jenom chyba v emailu?
>>
>> To nepredpokladej. :-) Bez zavorek je to platny pythoni vyraz, ktery
>> ovsem nic nezavre.
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
Další informace o konferenci Python