|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 316
|
[Ubuntu-Python] (py)inotify.. comportamento non previsto
Ciao a tutti!
Avrei bisogno di una mano con questo inotify. Inotify per chi non lo sapesse è un "watcher" che in pratica osserva le modifiche effettuate in una cartella (modifica/cancellazione di file bla bla bla) e li riporta sotto forma di segnali (credo). Pyinotify è il wrapper (ho detto bene?) di inotify scritto in python, che permette di gestire questi report con python. Io sto usando questo pyinotify perchè voglio sapere quando amule ha completato un file e l'ha spostato dalla cartella dei temp a quelli di default per i download. Ho fatto funzionare un po' tutto, infatti se manualmente creo (o rimuovo) dei file nella cartella osservata, il report avviene. Ma quando amule ci crea un file, non viene fatto nessun report ![]() ![]() Non riesco a capire dove sta l'inghippo.. Ecco il codice python (per completezza): Codice:
from pyinotify import WatchManager, Notifier, \ ThreadedNotifier, ProcessEvent, IN_DELETE, \ IN_CREATE import MySQLdb wm = WatchManager() # Watch Manager mask = IN_DELETE | IN_CREATE # watched events class PTmp(ProcessEvent): def process_IN_CREATE(self, event): print "Creating:", event.pathname //faccio qualcosa def process_IN_DELETE(self, event): print "Removing:", event.pathname p = PTmp() notifier = Notifier(wm, p) wdd = wm.add_watch('/home/alle/Downloaded', mask, rec=True) notifier.loop() ![]() Il codice in realtà non è fondamentale, penso sia più un problema alla base di unix e di questo inotify (ed è per questo che non l'ho messo in Programmazione).. che ne pensate? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Ho provato il tuo codice, ma per farlo funzionare ho dovuto fare varie modifiche, basandomi sulla documentazione e sull'esempio che ho trovato alla pagina ufficiale: pyinotify documentation, Brief Tutorial.
Questo è lo script: Codice:
#!/usr/bin/python from pyinotify import WatchManager, Notifier, \ ThreadedNotifier, ProcessEvent, EventsCodes import os #import MySQLdb wm = WatchManager() # Watch Manager mask = EventsCodes.IN_DELETE | EventsCodes.IN_CREATE # watched events class PTmp(ProcessEvent): def process_IN_CREATE(self, event): print "Create: %s" % os.path.join(event.path, event.name) # faccio qualcosa def process_IN_DELETE(self, event): print "Remove: %s" % os.path.join(event.path, event.name) p = PTmp() notifier = Notifier(wm, p) wdd = wm.add_watch('/home/gimli/Desktop', mask, rec=True) #notifier.loop() while True: # loop forever try: # process the queue of events as explained above notifier.process_events() if notifier.check_events(): # read notified events and enqeue them notifier.read_events() # you can do some tasks here... except KeyboardInterrupt: # destroy the inotify's instance on this interrupt (stop monitoring) notifier.stop() break Codice:
gimli@altarf:~/Desktop$ ./notify Create: /home/gimli/Desktop/temp Remove: /home/gimli/Desktop/temp ^C Hai provato altre flag oltre alle IN_CREATE IN_DELETE? Per esempio mi sembrano attinenti gli IN_MOVE_QUALCOSA, poiché il mulo sposta i file dalla directory temporanea alla incoming. P.S. non ho esplorato con cura tutto il codice (anche perché è la prima volta che tocco il python...), ho solo fatto le modifiche minime per farlo funzionare. Ultima modifica di Gimli[2BV!2B] : 09-11-2008 alle 16:48. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 316
|
grazie intanto per la risposta!
a me dava quel risultato, anche senza modifiche, ma si vede che nel postare il codice ho dimenticato un pezzo cmq in effetti ho provato solo quelli, potrebbe proprio essere come dici tu tento domani e poi aggiorno qui ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 316
|
Quote:
![]() cmq non sei l'unico che tocca per la prima volta il python :P |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:18.