Python中的查找和删除被锁定文件

2024-04-20 14:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Unix上使用python来检测文件是否被锁定。删除文件是可以的,假设它有助于检测文件是否被锁定。

文件最初可能是由另一个进程以独占方式打开的。文档似乎表明,如果文件被锁定,os.unlink不一定会返回错误。

有什么想法?


Tags: 文件文档进程os错误方式unixunlink
3条回答

我试图在mac中锁定一个文件,并在另一个终端中删除同一个文件。 它允许删除文件。

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

fcntl文档:

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

If LOCK_NB is used and the lock cannot be acquired, an IOError will be raised and the exception will have an errno attribute set to EACCES or EAGAIN (depending on the operating system; for portability, check for both values).

它使用底层的unix flock机制,所以看起来它应该做您想要的事情。还要注意还有^{},它可能更独立于平台。

检查文件是否被锁定的最佳方法是尝试将其锁定。fcntl module将在Python中执行此操作,例如

fcntl.lockf(fileobj.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)

如果文件已经被锁定,这将引发一个IOError;如果没有,则可以调用

fcntl.lockf(fileobj.fileno(), fcntl.LOCK_UN)

再次解锁。

请注意,与Windows不同,在Unix中打开要写入的文件不会自动为您提供独占锁。还要注意,fcntl模块在Windows上不可用;您需要使用os.open,这是一个不太友好但更可移植的接口(可能需要再次打开文件)。

相关问题 更多 >