检查文件是否已打开以供其他任务写入

问题描述 投票:0回答:1

是否可以(在Linux下的Python中)确定文件是否仍在写入且尚未关闭?

我正在尝试将数据写入缓存(文件),当其他进程已经在访问它时,该数据尚未完成。然后,文件/缓存对于读取它的进程来说似乎已损坏。

python linux file io
1个回答
0
投票

解决方案的第一部分,您可以在写入时锁定文件并防止其他进程更改它。

fcntl 上的 python 文档

import fcntl
   import os

   def lock_file(file_path):
       fd = os.open(file_path, os.O_RDWR)
       fcntl.flock(fd, fcntl.LOCK_EX)
       return fd

   def unlock_file(fd):
       fcntl.flock(fd, fcntl.LOCK_UN)
       os.close(fd)

解决方案的第二部分是在其他进程完成之前阻止您的访问。一个可能的解决方案是监听系统 inotify 事件。

python inotify 包 或其他包裹

pyinotify

 import inotify.adapters

   def _main():
       i = inotify.adapters.Inotify()

       # Add a watch on the directory or file
       i.add_watch('/path/to/your/file_or_directory')

       for event in i.event_gen(yield_nones=False):
           (_, type_names, path, filename) = event
           if 'IN_CLOSE_WRITE' in type_names:
               print(f"File {filename} has been closed after writing.")
© www.soinside.com 2019 - 2024. All rights reserved.