incron 的 IN_CREATE 事件会给我一个空白文件吗?

rob*_*rod 5 inotify

我想监视新文件的目录,该目录将由另一个进程创建。我打算用incrod它来做这件事。

我对响应文件更改不感兴趣,因为这些文件不应该被更新。因此,该IN_CREATE事件似乎是监听的明智选择。但是,我不确定,如果我侦听该事件,是否会得到一个空文件(在其他进程向其写入任何信息之前)?我应该改用这个IN_WRITE_CLOSE事件吗?

Nyk*_*kin 5

您可以观察哪些事件被传递到您的目录,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 事件听起来很合理。