2012-09-03 87 views
1

我是一個Python的新手&我試圖自動化與我的家庭服務器同步的同步。我發現了看門狗&我正在嘗試使用它,但是每當我運行「touch test.txt」時,腳本都會不斷啓動新的同步過程。由於觀察者正在使用從隊列繼承的類,因此我認爲在它將隊列頂部的第一個事件彈出後應該進行阻塞。我在這裏忽略了什麼嗎?Python看門狗:爲什麼我的子進程連續調用?

代碼:

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

class ChangeHandler(FileSystemEventHandler): 
    def on_any_event(self, event): 
     subprocess.call(["/usr/bin/unison", "-batch", "-silent", "-ui", "text", 
     "default"]) 

if __name__ == "__main__": 
    observer = Observer() 
    observer.schedule(ChangeHandler(), '/home/philip', True) 
    observer.start() 
    try: 
     while True: 
     time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 

輸出:

props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads props <-?-> props /props <-?-> props  Documents props <-?-> props  Downloads 
+0

而真: time.sleep(1)看起來是這樣,直到用戶按下「Ctrl + C鍵」將繼續,直到時間本身玩完... – Jingo

+0

@Jingo,或者更可能的是,並導致一個'KeyboardInterrupt' ... –

+1

它花了pyinotify終於明白,我正在同步目錄,同時觀看文件系統事件同一目錄。當然,除非我在處理事件時暫停Observer/Notifier,否則我會接到多個呼叫。 –

回答

1

OP充分回答了這個在註釋:

它帶着pyinotify中工作,終於明白,我在一個同步目錄,同時觀看文件系統事件的相同目錄。當然,除非我在處理事件時暫停Observer/Notifier,否則我會接到多個呼叫。