在Python中检测并删除锁定文件
我想用Python在Unix系统上检查一个文件是否被锁定。如果删除这个文件能帮助我判断它是否被锁定,那也没问题。
这个文件可能是被其他程序独占打开的。文档上似乎说,使用os.unlink删除文件时,如果文件被锁定,可能不会返回错误。
有没有什么好的想法?
3 个回答
-1
我在Mac上尝试锁定一个文件,然后在另一个终端删除这个文件。结果发现文件还是可以被删除。
lock_file_path = "/tmp/lock.file"
fd = open(lock_file_path,"w")
fcntl.flock(fd.fileno(),LOCK_EX)
while True:
print("Locked")
8
检查一个文件是否被锁定的最好方法就是尝试去锁定它。在Python中,可以使用fcntl模块来实现,比如:
fcntl.lockf(fileobj.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
如果文件已经被锁定,这段代码会抛出一个IOError错误;如果没有错误发生,那就说明文件可以锁定。接下来,你可以使用:
fcntl.lockf(fileobj.fileno(), fcntl.LOCK_UN)
来解锁文件。
需要注意的是,与Windows不同,在Unix系统中,打开一个文件进行写入并不会自动给你一个独占锁。另外,fcntl模块在Windows上是不可用的;你需要使用os.open,这个接口相对不太友好,但更具可移植性(可能还需要重新打开文件)。