CGI/fastCGI: NamedTemporaryFile produziert Dateileichen...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 2. März 2006, 16:05

Ich hab mein Download-Skript so umgebaut das es nicht mehr StringIO nimmt, sondern mit tempfile.NamedTemporaryFile() ein tar-File in's Dateisystem schreibt...

Das klappt auch super, wenn der Download komplett durchgelaufen ist... Also die Temp-Datei wird dann schön sauber gelöscht...

Wenn jedoch der User den Download vor ablauf abbricht, dann bleibt die Temp-Datei leider übrig und müllt das /tmp zu :(

Ich könnte natürlich mit dem prefix arbeiten und zu alte Dateien automatisch löschen, aber dafür müßte es doch eine bessere Möglichkeit geben...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Donnerstag 2. März 2006, 23:23

Wenn Du unter Unix bist, dann könntest Du die Datei zum lesen öffnen, dann löschen und dann auslesen und an den Klienten schicken. Solange ein Dateideskriptor auf eine Datei verweist verschwindet die Datei nicht, sondern nur der Name auf der Platte. Erst wenn die Datei geschlossen wird, räumt Unix/Linux die Datei auf der Platte weg. Quasi ein Garbage Collector mit Referenzzähler wie bei CPython.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 2. März 2006, 23:52

Ist das nicht so, wenn ich statt NamedTemporaryFile() -> TemporaryFile() nehmen würde? So richtig hab ich die Doku dazu nicht verstanden: http://www.python.org/doc/current/lib/m ... l#l2h-2201

Generell muß das ganze auch auch unter Windows funktionieren :?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten