Seite 1 von 1

Skript löscht Datei nach kopieren,obwohl Datei unvollständig

Verfasst: Freitag 25. September 2009, 11:05
von Kreavis
Hallo,

ich kopiere mit einem Python Skript Dateien aus einem Ordner. Dieser Ordner wird in unregelmäßigen Abständen durch FTP Downloads "gefüllt".
Das Skript kopiert die Dateien in Ordner die nach bestimmten Kriterien erstellt werden.

Nun zu meinem Problem:
Wenn eine Datei noch heruntergeladen wird, so erscheint diese schon im Import Verzeichnis. Wenn das Skript zeitgesteuert zufällig in diesem Zeitraum gestartet wird, dann kopiert es und löscht anschließend die Datei, auch wenn die Datei noch nicht vollständig heruntergeladen wurde.

Ich verwende den Befehl "shutil.copy" zum kopieren und "os.remove(datei)" um die Datei zu entfernen.

Über einen Lösungsansatz, wie ich es verhindern kann dass unvollständige Dateien gelöscht werden wäre ich sehr dankbar.

Gruß
Christoph

Re: Skript löscht Datei nach kopieren,obwohl Datei unvollstä

Verfasst: Freitag 25. September 2009, 11:10
von /me
Kreavis hat geschrieben: Über einen Lösungsansatz, wie ich es verhindern kann dass unvollständige Dateien gelöscht werden wäre ich sehr dankbar.
Meiner erster Ansatz wäre, das Änderungsdatum der Datei zu berücksichtigen.

Verfasst: Freitag 25. September 2009, 11:16
von Kreavis
Stimmt, das wäre eine Möglichkeit.

Also den Zeitstempel der aktuellen Datei mit der Systemzeit vergleichen und ein Kriterium, z.B. "älter als 10 Minuten"?

Verfasst: Freitag 25. September 2009, 11:24
von Hyperion
Unter Linux gibt es "lsof", mit dem man checken kann, ob andere Prozesse grad auf eine Datei zugreifen. Vermutlich gibts was ähnliches für Windows / Mac OS. Und dann sollte es dafür nen Python-Wrapper geben :-)

Verfasst: Freitag 25. September 2009, 11:34
von Kreavis
@Hyperion:
Das klingt nach einer eleganten Lösung. Ich werde mal nach einer Windows "list open files" Variante suchen.

Verfasst: Freitag 25. September 2009, 11:36
von Hyperion
Kreavis hat geschrieben:@Hyperion:
Das klingt nach einer eleganten Lösung. Ich werde mal nach einer Windows "list open files" Variante suchen.
Hab grad mal auf die Schnelle gegoogelt. Da wird immer gesagt, dass diese Mechanismen doch stark OS abhängig sind. Evtl. gibts aber ja doch was in der Standard-Lib? Ich habe da nicht so viel Erfahrung, aber es gibt hier ja genug "Gurus" :-)

Verfasst: Samstag 26. September 2009, 00:43
von lunar
@Kreavis: Kannst Du die FTP-Downloads denn beeinflussen?

Verfasst: Samstag 26. September 2009, 08:00
von snafu
Du könntest Pyinotify dein Download-Verzeichnis beobachten lassen. Den Event-Handler (siehe Tutorial) lässt du auf das Event `IN_CLOSE` reagieren und darin die geschlossene (und damit mutmaßlich komplette) Datei an den gewünschten Ort verschieben.

EDIT: `IN_CLOSE_WRITE` wäre vielleicht noch deutlicher.

Verfasst: Samstag 26. September 2009, 16:59
von Kreavis
@lunar: nein, ich kann die FTP-Downloads nicht beeinflussen, die Dateien werden zu sehr unterschiedlichen Zeitn durchgeführt.

@snafu: Danke für den Link, nach sowas hab ich eh gesucht.