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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kreavis
User
Beiträge: 11
Registriert: Dienstag 11. August 2009, 11:15

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Kreavis
User
Beiträge: 11
Registriert: Dienstag 11. August 2009, 11:15

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"?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :-)
Kreavis
User
Beiträge: 11
Registriert: Dienstag 11. August 2009, 11:15

@Hyperion:
Das klingt nach einer eleganten Lösung. Ich werde mal nach einer Windows "list open files" Variante suchen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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" :-)
lunar

@Kreavis: Kannst Du die FTP-Downloads denn beeinflussen?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Kreavis
User
Beiträge: 11
Registriert: Dienstag 11. August 2009, 11:15

@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.
Antworten