2009-08-24 64 views
3

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

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

想法?

回答

6

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

6

fcntl文档:

fcntl.lockf(FD,操作[,长度[,开始[,何处]]])

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

这使用底层的unix flock机制,所以看起来应该按照自己的意愿去做。另外请注意,也有os.open,这可能是更平台无关。