2011-05-13 8 views

Respuesta

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() 

Reemplazar cmd con el comando que desea ejecutar y file.watched con el archivo que desea ver, obviamente.

+0

tengo que ejecutar un programa Python así que tengo que poner algo como esto: 'python My_Prog. py = ['/ bin/echo', 'File', ev.pathname, 'changed'] '?? –

+0

@Bhuvan raj No, más como 'cmd = ['/ usr/bin/env', 'python', './my_prog.py', ev.pathname]' – phihag

+0

muchas gracias :) :) :) :) Esta funcionando. Me gustaría que me explicaras qué hace ev.pathname en esa lista de parámetros. –

2

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

estoy trabajando en añadir un poco de bondad inotify a doIT. Para eso quiero recibir una, y una sola notificación, cada vez que se modifica un archivo. Inotify hace el trabajo duro de ver el sistema de archivos y Pyinotify proporciona una interfaz de Python. Pero usarlo no fue sencillo como esperaba. El problema es que los editores manipulan los archivos por sus propios medios ...

Funcionó bien cuando usé "echo". Pero que cuando probé con Emacs recibí 3 notificaciones. Con VIM fue incluso peor, ¡no recibí notificaciones ni un mensaje de error!

Conseguir el ejemplo excelente de phihag

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

podrían ser:

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