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
Skript löscht Datei nach kopieren,obwohl Datei unvollständig
Meiner erster Ansatz wäre, das Änderungsdatum der Datei zu berücksichtigen.Kreavis hat geschrieben: Über einen Lösungsansatz, wie ich es verhindern kann dass unvollständige Dateien gelöscht werden wäre ich sehr dankbar.
- 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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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"Kreavis hat geschrieben:@Hyperion:
Das klingt nach einer eleganten Lösung. Ich werde mal nach einer Windows "list open files" Variante suchen.
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.
EDIT: `IN_CLOSE_WRITE` wäre vielleicht noch deutlicher.