2017-02-18 1 views
2

Ich versuche ein Python-Skript zu schreiben, das unter Windows läuft. Dateien werden alle paar Sekunden in einen Ordner kopiert, und ich werde diesen Ordner alle 30 Sekunden nach Namen der neuen Dateien abfragen, die nach der letzten Abfrage in den Ordner kopiert wurden.Abrufen der Zeit, in der eine Datei in einen Ordner kopiert wird (Python)

Was ich versucht habe, ist eine der os.path.getXtime(folder_path) Funktionen zu verwenden und diese mit dem Zeitstempel meiner vorherigen Umfrage zu vergleichen. Wenn der Wert von getXtime größer als der Zeitstempel ist, arbeite ich an diesen Dateien.

Ich habe versucht, die Funktion os.path.getctime(folder_path) zu verwenden, aber das hat nicht funktioniert, weil die Dateien erstellt wurden, bevor ich das Skript schrieb. Ich habe auch versucht, os.path.getmtime(folder_path), aber die modifizierten Zeiten sind in der Regel kleiner als die Umfrage Zeitstempel.

Schließlich versuchte ich os.path.getatime(folder_path), die zum ersten Mal funktioniert die Dateien wurden über kopiert. Das Problem ist, dass ich auch die Dateien lese, sobald sie in dem Ordner waren, so dass die Zugriffszeit immer aktualisiert wird und ich die gleichen Dateien immer wieder lese.

Ich bin mir nicht sicher, was ist eine bessere Möglichkeit oder Funktion, dies zu tun.

Antwort

1

Sie haben hier ein bisschen von XY problem. Sie möchten wissen, wann sich Dateien in einem Ordner ändern, Sie haben eine Lösung mit Homerolling ausprobiert, es hat nicht funktioniert und Sie möchten nun Ihre Lösung mit Homerolling reparieren.

Kann ich vorschlagen, dass Sie statt der schrecklichen Hacker ein vorhandenes Paket verwenden, das für die Überwachung von Dateiänderungen entwickelt wurde? Eine, die keine Polling-Schleife ist, aber tatsächlich über Änderungen benachrichtigt wird, wenn sie passieren? Während inotify Linux-only ist, gibt es other options for Windows.

+1

Ich würde auch hinzufügen, dass das Abfragen von Dateien, die in einem Verzeichnis angezeigt werden, eine ziemlich schlechte Möglichkeit ist, Informationen zuverlässig zu übertragen. Es scheint einfach zu sein, und ich nehme an, dass es so populär ist. Aber es ist schrecklich fehleranfällig und buchstäblich unmöglich, zuverlässig ohne Out-of-Band-Kommunikation zu implementieren, um sicherzustellen, dass Dateien, die im Verzeichnis "erscheinen", vollständig sind. Ohne diese Out-of-Band-Kommunikation ist es unmöglich, zu wissen, dass eine neue Datei im Verzeichnis vollständig ist. Vergessen Sie das Problem herauszufinden, welche Dateien neu sind. "Arbeitet die meiste Zeit" ist nichts, was ich jemals ** liefern möchte. –

Verwandte Themen