2011-05-13 17 views
5

Devo controllare qualsiasi input dato o qualsiasi modifica apportata al contenuto presente su un file, in seguito a qualsiasi modifica è necessario eseguire un programma python che si trova nella stessa cartella.come fare pyinotify per eseguire un programma su qualsiasi modifica su un file?

Ho fatto del mio meglio per capire, ma io non sono in grado di ottenere qualsiasi buon risultato. Sarebbe di grande aiuto, se qualcuno mi può aiutare attraverso questo.

grazie .. :)

risposta

9
import pyinotify,subprocess 
def onChange(ev): 
    cmd = ['/bin/echo', 'File', ev.pathname, 'changed'] 
    subprocess.Popen(cmd).communicate() 
wm = pyinotify.WatchManager() 
wm.add_watch('file.watched', pyinotify.IN_MODIFY, onChange) 
notifier = pyinotify.Notifier(wm) 
notifier.loop() 

Sostituire cmd con il comando che si desidera eseguire e file.watched con il file che si desidera guardare, ovviamente.

+0

devo eseguire un programma python quindi devo mettere qualcosa di simile: 'python My_Prog. py = ['/ bin/echo', 'File', ev.pathname, 'changed'] '?? –

+0

@Bhuvan Raj No, più come 'cmd = [ '/ usr/bin/env', 'python', './my_prog.py', ev.pathname]' – phihag

+0

thanks a lot :) :) :) :) Sta funzionando. Sarei felice se potessi spiegare cosa fa ev.pathname in quella lista di parametri. –

2

da http://schettino72.wordpress.com/tag/inotify/

sto lavorando per aggiungere un po 'di bontà inotify per doit. Per questo voglio ricevere una e una sola notifica ogni volta che un file viene modificato. Inotify fa il duro lavoro di guardare il file system e Pyinotify fornisce un'interfaccia python. Ma usarlo non era semplice come mi aspettavo. Il problema è che gli editor manipolano i file a modo suo ...

Ha funzionato bene quando ho usato "echo". Ma rispetto a quando ho provato con Emacs ho ricevuto 3 notifiche. Con VIM è stato anche peggio, non ho ricevuto notifiche e un messaggio di errore!

Ottenere l'esempio eccellente di phihag

wm.add_watch('file.watched', pyinotify.IN_MODIFY, onChange) 

potrebbe essere:

wm.add_watch('file.watched', pyinotify.IN_CLOSE_WRITE, onChange)