我想在Unix上使用python检测文件是否被锁定。删除文件是可以的,假设它有助于检测文件是否被锁定。
该文件最初可能由另一个进程独占打开。文档似乎暗示如果文件被锁定,os.unlink不一定会返回错误。
想法?
答案 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")