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

psy*_*tik 4 python

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

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

想法?

小智 8

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


ire*_*ses 7

来自fcntl文档:

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

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

这使用了底层的unix flock机制,所以看起来它应该做你想要的.另请注意os.open,也可能更加平台无关.