我有一个Python脚本,用于检查拾取目录并处理它找到的任何文件,然后删除它们。拾取目录:如何拾取仍在写入的文件?
如何确保不会拾取正在将该文件放入该目录的进程正在写入的文件?
我的测试案例非常简单。我将300MB文件复制粘贴到拾取目录中,并且脚本通常会抓取仍在写入的文件。它仅对部分文件进行操作,然后将其删除。这会引起操作系统中的文件操作错误,因为它正在写入的文件消失。
我试图在打开/处理/删除它之前获取文件上的锁(使用FileLock模块)。但是这并没有帮助。
我已经考虑检查文件的修改时间,以避免X秒内的任何事情。但那似乎很笨重。
我的测试是在OSX上,但我试图找到一个解决方案,将跨主要平台的工作。
我在这里看到一个类似的问题(How to check if a file is still being written?),但没有明确的解决方案。
谢谢
正在编写该文件的应用程序应该真的是自动完成的,但我意识到您可能无法控制这个。 –
我认为要可靠地做到这一点,要么文件需要原子化写入,要么需要通过操作系统直接或间接与写入进程进行通信。有特定于操作系统的解决方案,如文件锁定和修改事件,但AFAIK没有任何跨平台的。检查修改时间可能与您将获得跨平台解决方案一样好。 –