是否可以(在Linux下的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.")