分拣目录:如何不拾取仍在写入的文件?

Jag*_*agu 6 python file-io batch-processing

我有一个Python脚本,它检查拾取目录并处理它找到的任何文件,然后删除它们.

如何确保不会删除仍然由删除该目录中的文件的进程写入的文件?

我的测试用例非常简单.我将300MB的文件复制粘贴到拾取目录中,并且脚本经常会抓取仍在写入的文件.它仅对部分文件进行操作,然后将其删除.这会触发操作系统中的文件操作错误,因为它写入的文件消失了.

  • 在打开/处理/删除它之前,我尝试获取文件锁(使用FileLock模块).但这没有帮助.

  • 我已经考虑过检查文件上的修改时间,以避免在X秒之内发生任何事情.但这似乎很笨拙.

我的测试是在OSX上,但我正在尝试找到一个适用于主要平台的解决方案.

我在这里看到一个类似的问题(如何检查文件是否仍在写入?),但没有明确的解决方案.

谢谢

Joh*_*yes 2

作为解决方法,您可以侦听文件修改事件(看门狗是跨平台的)。修改后的事件(至少在 OS X 上)不会在每次写入时触发,只会在关闭时触发。因此,当您检测到修改的事件时,您可以假设所有写入都已完成。

当然,如果文件以块的形式写入,并在每个块之后保存,则这是行不通的。