我每次尝试修改某个文件时都尝试启动python脚本。准确地说,我在Raspberry Pi的串行端口上有一台将数据写入文本文件(test.txt)的设备。我尝试了两种工具-看门狗/ Pyinotify。每次修改文件时(触发事件看门狗: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()
最佳答案
使用pyinotify
时遇到相同的问题。但是将IN_MODIFY
更改为IN_CLOSE_WRITE
可以解决此问题。您可以从此answer获取更多信息
关于python - Pyinotify/看门狗一次编辑触发两次修改事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37768601/