Änderungsdatum mit Python erkennen

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.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Dienstag 3. April 2007, 09:11

Guten Morgen,

ich such mir schon den ganzen Morgen nen Wolf find aber keine Lösung auf mein Problem, wahrscheinlich weil ich einfach nicht die richtigen Stichwörter hab. Vielleicht kann mir ja jemand von euch helfen:

Ich möchte Python alle 2 Minuten einen Ordner durchsuchen lassen und jedesmal wenn eine Datei neuer ist als 2 Minuten, dann soll er sie kopieren und einen Mechanismus anstoßen.
Also so zu sagen eine Art Sicherung.
Allerdings brauche ich auch den Namen der Datei für eine Art "log" datei.

Gibt es in Python einen Befehl der immer die neuste Datei findet? Weil jede Datei hat ja einen Zeitstempel.

Gruß BoOnOdY
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 3. April 2007, 09:23

BoOnOdY hat geschrieben:jede Datei hat ja einen Zeitstempel.
Hi BoOnOdY!

``os.path.getmtime()``

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Dienstag 3. April 2007, 09:43

BoOnOdY hat geschrieben:Ich möchte Python alle 2 Minuten einen Ordner durchsuchen lassen und jedesmal wenn eine Datei neuer ist als 2 Minuten, dann soll er sie kopieren und einen Mechanismus anstoßen.
Unter neueren Linux Kerneln gibt's ja die Möglichkeit, dafür eine Kernel-Schnittstelle zu benutzen, die das Polling, welche Dateien sich geändert haben, überflüssig macht (inotify).
Das dafür nötige Modul heißt gamin. Das wäre auf dieser Plattform wohl die eleganteste Lösung.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Mittwoch 4. April 2007, 12:47

Ne ich hab Windows.

Also nur mal so was ich machen will :

Einen Ordner überwachen und jedes mal, wenn eine neue Datei in ihn geschrieben wird, will ich mir deren Namen in ne kleine Log schreiben.

Das kleine Problem ist, dass der Ordner über FTP erreicht werden muss.

Soll so ne Art Sicherung für meinen Webspace werden. Jedesmal wenn ich etwas neues drauflade, soll ein anderer meiner Rechner sich die Datei automatisch kopieren und in eine Log deren Namen schreiben.

Ich weiß nicht wie ich mich da drann machen soll. Also ich finde keinen Ansatz wie ich an das Problem drann gehen solll. So von wegen Stichworten die ich googeln kann um Befehle zu finden und so.

Hat einer ne Idee?

Gruß BoOnOdY
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Mittwoch 4. April 2007, 13:30

BoOnOdY hat geschrieben:Das kleine Problem ist, dass der Ordner über FTP erreicht werden muss.
Hi BoOnOdY!

Nimm ``wget``, verwende den ``--mirror``-Parameter

- http://gnuwin32.sourceforge.net/packages/wget.htm
- http://de.wikipedia.org/wiki/Wget
- http://wget.dotsrc.org/index.shtml

und vergiss das Logging. Und nein, ich weiß immer noch nicht genau was du willst.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Mittwoch 4. April 2007, 13:43

Ne das ist nicht das wahre, da der archiv PC ein server im Keller ist.


Also ich versuchs ma ganz einfach zu erklären:

Auslösehandlung:
Auf einem FTP Server kommt eine Datei dazu

Folgehandlung
Datei wird auf Server kopiert
Dateiname wird in eine Log eingetragen

Man könnte es als art "FTP-RAID" beschreiben

und ich brauch halt was, das immer weiß, wann ne Datei neu ist und wann nicht. Das ist mein Problem.
Wie erkennt ein Python programm, ob eine Datei schon beim letzten mal auf dem Server war.
Ich würde die dann gerne immer gucken lassen, einen Slepp von 5-10 Minuten einlegen und dann wieder gucken. Aber ich brauch ja irgendwelche Vergleichsparameter damit das Programm weiß was neu ist und was nicht?


Gruß BoOnOdY
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mittwoch 4. April 2007, 13:59

BoOnOdY hat geschrieben: Auslösehandlung:
Auf einem FTP Server kommt eine Datei dazu

Folgehandlung
Datei wird auf Server kopiert
Dateiname wird in eine Log eingetragen
Also ich würde dir liebend gerne helfen aber ich verstehe is immer noch nicht... :?

:?:
Du hast also einmal einen FTP-Server und dann einen weiteren Server?!
Und auf diesen werden dann die Dateien kopiert?! Wodurch und wann?
Sorry leuchtet mir noch nicht ganz ein...
Und von welchem Rechner aus wird jetzt das script ausgeführt?

Also wenn du von Rechner A (Rechner auf dem das Skript laufen soll) auf einen Rechner B (FTP-Server) zugreifen willst,
kannst du dir ja mal das angucken:
http://www.python.org/doc/2.4.1/lib/module-ftplib.html
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Mittwoch 4. April 2007, 14:13

Also ich habe einen PCa auf dem FTP drauf ist
und einen PCb auf dem das Skript laufen soll
und noch einen PCc der neue Daten auf den FTP von PCa schiebt.

ich will immer wenn PCc eine Datei auf PCa´s FTP hochläd automatisch PCb eine Kopie davon machen lassen und den Dateinamen in ne Log schreiben lassen.

So besitzt PCb einen Ordner indem alle Dateien die auf PCa in FTP reingestellt wurden sind und auch bleiben. Wenn also auf PCa eine Datei gelöscht wird ist die Sicherung noch auf PCb.

Ich kann es nicht selbst auslösen und von Hand machen, weil nicht nur ich auf den FTP zugreife und außerdem das alle 5 Minuten passiert. Also wär das sau viel Arbeit, und das nur einmal am Tag zu machen ist mir zu unsicher.


Jetzt bin ich zwar verwirrt aber ich hoffe es ist dir klarer ?

Gruß BoOnOdY
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mittwoch 4. April 2007, 15:33

Jo ok, das hab ich dann soweit verstanden.

Naja, auf jeden Fall würde ich im Prinzip so vorgehen.

- Alle 10 Minuten mit FTP-Server connecten.
- Liste (passende Struktur) von Dateinamen und deren aktuelles Datum beziehen.
- mit Liste der vorhandenen Dateien auf dem Clientrechner vergleichen (auch nach Datum )
- Dateien die auf dem Server neu(bzw neuer) sind runterladen und das in der log festhalten
- connection schliessen

Also ich würde mir halt vorher mal genauer die ftplib angucken und schauen
wie man da am besten an die einzelnen Daten zu den Dateien kommt.
(Zeitstempel, Name usw)
Habe leider auf die schnelle keine schönen examples zur Hand und kann
das leider auch gerade nicht bei mir selber durchspielen.
Unter Umständen muss man da dann einige Strings Parsen die zurück gegeben werden.

Vielleicht gibts auch ne bessere Alternative als die ftplib?!
Da bin ich überfragt...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 4. April 2007, 15:49

Zap hat geschrieben:Vielleicht gibts auch ne bessere Alternative als die ftplib?!
Ja, gibt es. Nennt sich Unison und funktioniert sogar in zwei Wege und über verschiedene Transportprotokolle.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Mittwoch 4. April 2007, 16:04

Das geht auch mit FTP? weil ich komm an den Server nur via FTP ran.

und ich brauche die Log datei und ein paar weitere Mechanismen anzustoßen. Das heißt die Daten sollen noch sortiert, bzw. bearbeitet werden.

Die Datei kommt auf den FTP server von einem fremden PC
ich lad sie mir runter und protokolliere ihren Namen
ich stoße verschiede Mechanismusprogramme an, die sich den Namen aus der log holen und die Datei bearbeiten.

Gruß BoOnOdY
BlackJack

Mittwoch 4. April 2007, 16:04

Wenn die Anforderung mit der Logdatei nicht wäre, hätte ich ja vorgeschlagen alle halbe Stunde oder so ein `rsync` anzuwerfen.

Noch ein Punkt, den man bedenken muss: Wenn so ein Backup-Skript anläuft und eine neue Datei entdeckt, kann es durchaus sein, dass diese Datei gerade hochgeladen wird und noch gar nicht komplett ist.

Vielleicht kann man auch auf die Log-Datei vom FTP-Server zugreifen und sich dort die neuen und komplett hochgeladenen Dateien heraussuchen!?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 4. April 2007, 16:18

BoOnOdY hat geschrieben:Das geht auch mit FTP? weil ich komm an den Server nur via FTP ran.
Nein, so wie ich das sehe geht das nicht.

Entweder du ziehst dir einfach in der Nacht jeweils ein normales Backup oder du benutzt einen besseren Server.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Mittwoch 4. April 2007, 21:13

Dann hab ich aber immernoch das Problem mit dem Automatismus den ich für jede neue Datei anwerfen muss, damit die gefiltert wird und so. Naja is lass es einfach mal hier ein bisschen im Forum stehen, vieleicht kommt ja jemandem noch ein Gedanke.

Aber Danke bis jetzt schon ma, dass ihr alle versucht mir zu helfen :)

gruß
BoOnOdY
BoOnOdY
User
Beiträge: 112
Registriert: Samstag 22. Juli 2006, 13:38

Donnerstag 5. April 2007, 16:16

Hy ich weiß nicht ob ich ein neues Topic aufmachen soll, deswegen
SORRY 4 DOPPELPOST


Aber ich hab mir mal folgendes überlegt, wie man das Problem lösen könnte (eigentlich nur das aufgewertet was ihr hier gepostet habt) und schreib jetzt mal eine Art Struktogramm ( ich weiß, dass es kein richtiges ist, aber besser bekomm ichs auf die Schnelle nicht hin)


ANFANG
log.log unbenennen in log.alt
ftp.dir in log.log schreiben
log.log mit log.alt vergleichen
jede Datei/Zeile die sich in log.log von log.alt unterscheidet herunterladen.
einen kurzen Sleep einlegen
go to ANFANG



so weit so gut, nur ich brauch jetzt so zu sagen das "Handwerkszeug" dafür, also ein gutes Tutorial das beschreibt, wie man 2 Dateien Zeile für Zeile miteinander vergleicht und dann in eine neue Datei schreibt.

ich werd mich auch mal weiter von Tutorial zu Tutorial googeln, war aber bis jetzt nicht erfolgreich.


Gruß BoOnOdY
Antworten