python监视程序修改并创建了重复事件

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

在Ubuntu上运行,每次我创建一个文件,我都会得到一个修改和创建的事件

这是故意的还是我做错了什么

我正在使用事件处理程序类
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>