2009-02-28 13 views
49

Ich suche nach einem plattformübergreifenden Dateiüberwachungs-Python-Paket? Ich weiß, dass es möglich ist, Dateien unter Windows mit pywin32 zu überwachen, und es gibt Pakete, die unter Linux/Unix laufen, aber weiß jemand etwas über ein plattformübergreifendes?Überwachung des Inhalts von Dateien/Verzeichnissen?

+1

Tim Golden hat eine sehr einfache plattformübergreifende Methode der Abfrage verwendet ein Verzeichnis mit os.listdir hier: http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html – bernie

+2

Was bedeutet "Monitor"? Bitte geben Sie einen Hinweis, was Sie zu tun versuchen. –

Antwort

29

Für Unix/Linux-basierte Systeme sollten Sie File Alteration Monitor Python bindings bis libfam verwenden.

Für Windows-basierte Systeme sollten Sie in die Win32-API FindFirstChangeNotification und verwandte Funktionen binden.

Wie für eine Cross-Plattform-Art, weiß ich nicht über eine gute Cross-Plattform-Art. Ich denke, es wäre am besten, ein Modul selbst zu bauen, das auf jedem Betriebssystem funktioniert, das eine der beiden obigen Methoden verwendet, nachdem es erkannt hat, welches Betriebssystem es ist.

+1

Kannst du erklären, wie man die W32 API in einem Beispiel benutzt ... weil ich das nicht verstehe ... – wishi

2

Ich fand diesen Link, der über Ihr Problem spricht. Obwohl es nicht wirklich eine Lösung/Bibliothek bereitstellt, denke ich, dass es helfen wird. http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html

Ich glaube nicht, dass es eine plattformübergreifende gibt, so dass Sie vielleicht Ihre eigenen rollen möchten.

Ich bin in diesem Bereich unerfahren, so bin ich mir nicht wirklich sicher. Ich hoffe das hilft.

Hinweis
ich korrigiert stehen, gamin ist auf Cygwin als Adam Bernier in einem Kommentar zu mir hingewiesen. Vielleicht möchten Sie andere Optionen auf Cygwin (falls vorhanden) recherchieren.

+0

Scheint ein gutes Feedback für Gamin unter Linux zu sein. FWIW, Gamin ist in Cygwin-Paketen aufgeführt: http://cygwin.com/packages/ – bernie

+0

Ah! Cygwin! Daran habe ich nicht gedacht. Ich stehe korrigiert. – batbrat

0

Der einfachste Weg unter Linux ist die Verwendung von inotifywait (vorausgesetzt, Ihr Kernel ist neu genug). Sie benötigen keine speziellen Bindungen, inotifywait kann angepasst werden, um Ausgabezeilen auf Standardausgabe in beliebiger Weise zu drucken. Look and this question für ein gutes Beispiel.

+0

Er erwähnte ausdrücklich Cross-Plattform.inotifywait ist nur für Linux –

81

Ich arbeite an einer MIT-lizensierten Bibliothek, die Python Programme hilft, Dateisystemereignisse so portabel wie möglich zu überwachen. Es gibt Unterschiede, die ich ausbügeln möchte. Hoch Alpha-Version im Moment:

es hier: http://github.com/gorakhargosh/watchdog/

Patches und Beiträge sind willkommen.

Ich hoffe, es hilft. =) Prost.

+0

Vielen Dank, ich war auf der Suche nach einer Cross-Plattform-Lösung und Watchdog ist wirklich hilfreich! – mtrovo

+0

Wann wird dies für python3 verfügbar sein? – avendael

+3

@avendael - Nun, anscheinend. Es unterstützt py3k an dieser Stelle. –

4

Auch diese Option check out:

http://pypi.python.org/pypi/watchdog

wurde mit einer Cross-Plattform-Anwendung auf Windows und OS X.

+3

Möglicherweise weil der Autor von Watchdog gepostet darüber in einer Antwort ein Jahr zuvor und es gibt nicht viel in dieser Antwort? Wahrscheinlich keinen Downvote wert, aber auch nicht viel wert. – fencepost

+1

Ich mag es, weil er sagte, er hat es benutzt und es ist OK. – droope

+0

Ich verstehe nie, warum eine Antwort abgelehnt wurde. Hier ist die Verwendung von Watchdog: http://pythonhosted.org/watchdog/quickstart.html – swdev