2009-08-24 63 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,這可能是更平臺無關。