在Python中检测和删除锁定文件

4
我想使用Python在Unix上检测文件是否被锁定。如果删除文件可以帮助检测文件是否被锁定,那么删除文件也是可以的。
文件可能最初被另一个进程以独占方式打开。文档似乎表明,即使文件被锁定,os.unlink也不一定会返回错误。
有什么想法吗?

对于 Windows 版本,请参见:Python:删除锁定文件 - user
3个回答

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,这是一个更加通用但不太友好的接口(可能需要重新打开文件)。

7

来自fcntl文档:

fcntl.lockf(fd, operation[, length[, start[, whence]]])

如果使用了LOCK_NB并且无法获取锁定,则会引发IOError,并将异常的errno属性设置为EACCES或EAGAIN(取决于操作系统;为了可移植性,请检查这两个值)。

这使用底层unix flock机制,因此看起来应该可以实现您想要的功能。还要注意还有os.open,可能更具平台独立性。


-1

我试图在Mac上锁定一个文件,然后在另一个终端中删除同一文件。结果它允许这个文件被删除了。

lock_file_path = "/tmp/lock.file"
fd = open(lock_file_path,"w")
fcntl.flock(fd.fileno(),LOCK_EX)
while True:
    print("Locked")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接