2014-04-05 18 views
6

Próbuję obejrzeć niektóre pliki tekstowe, gdy są one modyfikowane przy użyciu watchdog, ale wydaje się, że tylko uzyskać zdarzenia dla plików .tmp. Rozumiem, że w ten sposób zapisywany jest tekst sublimowany, ale czy nie powinienem również otrzymać zdarzenia uruchamianego dla rzeczywistego pliku?Python watchdog nie wypalanie wszystkich zdarzeń

To co mam przy próbie zapisania pliku w miejscu /home/john/resources/css/style.css w Sublime Text:

/home/john/resources/css/.sublaa.tmp 
/home/john/resources/css/.sublaa.tmp 
/home/john/resources/css/.sublaa.tmp 

Wydaje się dostać tylko zdarzenia opalane dla PZT plików, ale nie do rzeczywistego pliku. To faktycznie działa poprawnie na MacOSX, ale nie na Ubuntu.

#!/usr/bin/python 
import time 
from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler 


class MyHandler(FileSystemEventHandler): 
    def on_any_event(self, event): 
     print event.src_path 

if __name__ == "__main__": 
    event_handler = MyHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path='.', recursive=False) 
    observer.start() 

    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 
+1

Nie wiem, ale myślę, że powinieneś spróbować https://github.com/seb-m/pyinotify i sprawdzić, czy ma ten sam problem. –

+0

Zacznij od zastanowienia się, jaki wspaniały tekst * faktycznie * robi podczas zapisywania plików. Na przykład. użyj 'inotifywait -m .', aby potwierdzić, że zdarzenia create/delete faktycznie się zdarzają. W przeciwnym razie to tylko spekulacje. Zakładam, że nie ma takich problemów podczas korzystania z dotyku i rm. – takoi

Odpowiedz

-1

Jest to powszechny problem z edytorami, które tworzą pliki tymczasowe. Na stronie opakowania watchdog (https://pypi.python.org/pypi/watchdog) można znaleźć tę notatkę dotyczącą vim:

O watchdog korzystania z edytorów takich jak Vim

Vima nie modyfikuje plików, jeżeli nie jest to zalecane. Tworzy pliki kopii zapasowych, a następnie zamienia je, aby zastąpić pliki, które edytujesz na dysku. Oznacza to, że jeśli użyjesz Vima do edycji plików, zmodyfikowane zdarzenia dla tych plików nie będą wywoływane przez watchdog. Być może będziesz musiał skonfigurować Vima, aby odpowiednio wyłączyć tę funkcję.

W Sublime, aby wyłączyć tworzenie plików tmp, należy przejść do Preferencje -> Ustawienia - użytkownik i wyłączyć zapisywanie w postaci atomowej.

"atomic_save": false 
+0

Jestem tego świadomy, pytałem o to, że nie dostaję również zdarzenia dla rzeczywistego pliku. –

+0

Jeśli jesteś tego świadomy, powinieneś wiedzieć, że nie dostaniesz zdarzenia dla rzeczywistego pliku, chyba że zmienisz zachowanie edytora. Plik, który obserwuje watchdog, zostaje usunięty po zapisaniu zmian, w tym momencie watchdog traci wskaźnik do pliku. Nowy plik o tej samej nazwie, co oglądany plik, zostanie utworzony po zmianie nazwy ostatniego pliku tymczasowego. –

+0

Można również załączyć watchdog tak, aby nie sprawdzał, czy ogląda ten sam i-węzeł https://github.com/gorakhargosh/watchdog/issues/56#issuecomment-1796482 –