我想监视新文件的目录,该目录将由另一个进程创建。我打算用incrod
它来做这件事。
我对响应文件更改不感兴趣,因为这些文件不应该被更新。因此,该IN_CREATE
事件似乎是监听的明智选择。但是,我不确定,如果我侦听该事件,是否会得到一个空文件(在其他进程向其写入任何信息之前)?我应该改用这个IN_WRITE_CLOSE
事件吗?
您可以观察哪些事件被传递到您的目录,inotifywait
以检查它在您的进程运行时的行为:
$ inotifywait -m .
Setting up watches.
Watches established.
Run Code Online (Sandbox Code Playgroud)
例如,touch file
在同一目录中运行后:
$ inotifywait -m .
Setting up watches.
Watches established.
./ CREATE file
./ OPEN file
./ ATTRIB file
./ CLOSE_WRITE,CLOSE file
Run Code Online (Sandbox Code Playgroud)
由于创建文件和关闭文件之间存在延迟,因此正如您所怀疑的那样,在 CREATE 事件之后您将拥有空文件。观察运行后发生的事件:
from time import sleep
with open("somefile", 'w') as somefile:
sleep(15)
somefile.write("...")
Run Code Online (Sandbox Code Playgroud)
因此使用 CLOSE_WRITE 事件听起来很合理。