我有一个 Python 脚本,它检查拾取目录并处理它找到的任何文件,然后删除它们。
我如何确保不拾取仍在由将文件放入该目录的进程写入的文件?
我的测试用例非常简单。我将 300MB 的文件复制粘贴到 pickup 目录中,脚本经常会抓取一个仍在写入的文件。它仅对部分文件进行操作,然后将其删除。这会在操作系统中引发文件操作错误,因为它正在写入的文件消失了。
在打开/处理/删除文件之前,我已经尝试获取对文件的锁定(使用 FileLock 模块)。但这并没有帮助。
我考虑过检查文件的修改时间以避免在现在的 X 秒内发生任何事情。但这看起来很笨重。
我的测试是在 OSX 上进行的,但我正试图找到一个可以跨主要平台运行的解决方案。
我在这里看到一个类似的问题(How to check if a file is still being written?),但没有明确的解决方案。
谢谢
最佳答案
作为解决方法,您可以监听文件修改事件(watchdog 是跨平台的)。修改后的事件(至少在 OS X 上)不会在每次写入时触发,它只会在关闭时触发。因此,当您检测到修改事件时,您可以假设所有写入都已完成。
当然,如果文件以 block 的形式写入,并且在每个 block 之后保存,这将不起作用。
关于python - 取件目录 : How not to pickup files that are still being written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591598/