Pyinotify / Watchdog在一次编辑时触发两次修改事件

时间:2016-06-11 21:17:48

标签: python watchdog pyinotify

我每次尝试启动python脚本都是修改了某个文件。为了准确起见,我在Raspberry Pi的串行端口上有一个设备,可以将数据写入文本文件( test.txt )。我尝试了两种工具 - 看门狗/ Pyinotify。每次修改文件时(触发事件Watchdog:on_modified / Pyinotify:IN_MODIFY),它都会产生重复触发。我尝试了所有其他方法,甚至有些人建议的IN_CLOSE_WRITE,但这根本不起作用。 有人知道,如何在一次文件更新时触发单个事件?

我的代码使用Pyinotify(一个经过编辑的教程文件):

import pyinotify,subprocess
def onChange(ev):
    cmd = ['/usr/bin/env', 'python', 'doThisFile.py', ev.pathname]
    subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/home/pi/test.txt', pyinotify.IN_MODIFY, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

或看门狗:

#!/usr/bin/python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import subprocess
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        subprocess.call("/home/pi/doThisFile.py")
        print("Code started")
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 个答案:

答案 0 :(得分:1)

使用pyinotify时遇到相同的问题。但是将IN_MODIFY更改为IN_CLOSE_WRITE解决了这个问题。您可以从此answer

获取更多信息