在python中检测并删除锁定的文件

时间:2009-08-24 06:51:05

标签: python

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

该文件最初可能由另一个进程独占打开。文档似乎暗示如果文件被锁定,os.unlink不一定会返回错误。

想法?

3 个答案:

答案 0 :(得分:8)

检查文件是否被锁定的最佳方法是尝试锁定它。 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,这是一个不太友好但更便携的界面(可能需要重新打开文件)。

答案 1 :(得分:7)

来自fcntl文档:

  

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

     

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

这使用了底层的unix flock机制,所以看起来它应该做你想要的。另请注意,还有os.open,它可能更独立于平台。

答案 2 :(得分:-1)

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

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