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
而真: time.sleep(1)看起來是這樣,直到用戶按下「Ctrl + C鍵」將繼續,直到時間本身玩完... – Jingo
@Jingo,或者更可能的是,並導致一個'KeyboardInterrupt' ... –
它花了pyinotify終於明白,我正在同步目錄,同時觀看文件系統事件同一目錄。當然,除非我在處理事件時暫停Observer/Notifier,否則我會接到多個呼叫。 –