python监视程序修改并创建了重复事件
在Ubuntu上运行,每次我创建一个文件,我都会得到一个修改和创建的事件 这是故意的还是我做错了什么 我正在使用事件处理程序类python监视程序修改并创建了重复事件,python,watchdog,Python,Watchdog,在Ubuntu上运行,每次我创建一个文件,我都会得到一个修改和创建的事件 这是故意的还是我做错了什么 我正在使用事件处理程序类PatternMatchingEventHandler event_handler = MediaFileHandler(ignore_directories=True) observer = Observer() observer.schedule(event_handler, path=directory, recursive=True) observer.st
PatternMatchingEventHandler
event_handler = MediaFileHandler(ignore_directories=True)
observer = Observer()
observer.schedule(event_handler, path=directory, recursive=True)
observer.start()
如果这是正确的行为,我可以安全地忽略创建的事件吗?简短回答:
f=open(…,'w')
生成FileCreatedEvent
,f.flush()
或f.close()
可以生成FileModifiedEvent
。因此,是的,创建文件通常会同时生成FileCreatedEvent
和filemodifiedvents
您是否可以安全地忽略FileCreatedEvents取决于您正在尝试做什么。如果您有兴趣在创建文件时做出反应,那么您需要处理FileCreatedEvents,并且可能忽略FileModifiedEvents,因为在修改文件时可以生成FileModifiedEvents,而不生成FileCreatedEvents
使用规范的看门狗脚本(见下文),所有内容都应该更清晰
详细回答:要查看发生了什么,请运行canonical watchdog程序: 从一个终端:
% mkdir ~/tmp
% cd ~/tmp
% script.py
现在,在Python解释器中,当您以w
模式打开文件时:
In [126]: f = open('/home/unutbu/tmp/foobar', 'w')
终端打印
2014-02-05 16:29:34 - <FileCreatedEvent: src_path=/home/unutbu/tmp/foobar>
但是当你脸红的时候
In [128]: f.flush()
它报告一个FileModifiedEvent:
2014-02-05 16:29:55 - <FileModifiedEvent: src_path=/home/unutbu/tmp/foobar>
同样,关闭文件时会报告FileModifiedEvent,因为会将更多输出刷新到磁盘:
In [130]: f.close()
2014-02-05 16:30:12 - <FileModifiedEvent: src_path=/home/unutbu/tmp/foobar>
[130]中的:f.close()
2014-02-05 16:30:12 -
好的,谢谢。我就是这么想的。我很感激你的详细回答。
2014-02-05 16:29:55 - <FileModifiedEvent: src_path=/home/unutbu/tmp/foobar>
In [129]: f.write(' there')
In [130]: f.close()
2014-02-05 16:30:12 - <FileModifiedEvent: src_path=/home/unutbu/tmp/foobar>