2010-07-18 12 views
12

Vorrei invocare il mio browser chrome o firefox quando un file che ho specificato viene modificato. Come potrei "guardare" quel file per fare qualcosa quando viene modificato?Come posso "guardare" un file per la modifica/modifica?

di programmazione sembra che i passaggi sono .. fondamentalmente impostare un intervallo senza fine ogni secondo o giù di lì e la cache la data iniziale di modifica, quindi confrontare la data di ogni secondo, quando cambia invocano X.

risposta

23

come noto, è possibile utilizzare pyinotify:

Es .:

import webbrowser 
import pyinotify 

class ModHandler(pyinotify.ProcessEvent): 
    # evt has useful properties, including pathname 
    def process_IN_CLOSE_WRITE(self, evt): 
      webbrowser.open(URL) 

handler = ModHandler() 
wm = pyinotify.WatchManager() 
notifier = pyinotify.Notifier(wm, handler) 
wdd = wm.add_watch(FILE, pyinotify.IN_CLOSE_WRITE) 
notifier.loop() 

Questo è più efficiente di polling. Il kernel ti dice quando fa l'operazione, senza che tu debba chiedere continuamente.

+1

Grazie, grazie. È grandioso Esiste un lib simile per Windows (per ragioni di compatibilità)? – sdolan

+1

@sdolan, Windows ha [Notifiche cambio directory] (http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx). Esistono soluzioni multipiattaforma come pyqt's [QFileSystemWatcher] (http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qfilesystemwatcher.html). –

+1

@sdolan - Inoltre, PyGTK ha il monitor del file GIO. – detly

2

L'altra opzione è usare un checksum Puoi usare un modello simile a nosy.py del naso. Io uso quello da dingus per controllare la mia directory per le modifiche ed eseguire la suite di test.

8

The Linux Kernel ha un'API di monitoraggio file chiamato inotify. Un binding Python è pyinotify.

Con esso, è possibile costruire ciò che si desidera.

2

Utilizzare FAM per inserire un monitor nel file.

3

Installare inotify-tools e scrivere un semplice script di shell per guardare un file.

0

A quanto pare, watchdog opere sia su Linux & OSX che può essere utilizzato per monitorare i cambiamenti in una directory, nonché con ottima documentazione esempio. Funziona anche con python3.x nel caso in cui non si desideri forzare l'uso di python2.x

Problemi correlati