2012-11-14 97 views
6

我的目標是知道一個文件是否被另一個進程鎖定,即使我沒有訪問該文件!Python:檢查文件被鎖定

所以要更清楚一點,比方說,我打開文件使用python的內置open()與'wb'開關(寫作)。如果

  1. open()將拋出的IOError與錯誤號13(EACCES)的用戶沒有權限的文件或
  2. 該文件已被其他進程

如何檢測的情況下鎖定(2)在這裏?

我的目標平臺是Windows!

+2

檢查http://stackoverflow.com/questions/1861836/checking-file-permissions-in-linux-with-python – monkut

+1

一旦你確定用戶有權限,你仍然得到異常,那麼你知道的情況下( 2)已被擊中。 – monkut

+0

你知道其他進程如何鎖定文件嗎?似乎有[多種方式](http://en.wikipedia.org/wiki/File_locking#In_Unix-like_systems)來執行此操作。 –

回答

3

您可以使用os.access來檢查您的訪問權限。如果訪問權限是好的,那麼它必須是第二種情況。

+1

os.access似乎是要走的路,但是,在windows上,os.access(「myfile」,os.R_OK)對於我沒有權限的文件返回True。 – Ali

+1

@Ali - 你是對的。 os.access在windows中不返回正確的值。這裏是python.org的問題[http://bugs.python.org/issue2528]。它還提供了一個補丁,但我不確定是否應用該補丁是微不足道的。 – Harman

+1

感謝您指出錯誤。當使用win32security時,很容易在Windows中獲取文件的ACL權限。 – Ali

3

根據the docs:

errno.EACCES 
    Permission denied 
errno.EBUSY 

    Device or resource busy 

因此,只要做到這一點:

try: 
    fp = open("file") 
except IOError as e: 
    print e.errno 
    print e 

圖從那裏出來的錯誤號代碼,你設置。

+2

雖然對於權限拒絕和正在使用的文件,但errno是相同的。 – Ali

+0

在'fp = open(「file」)之後使用'fp.close()''我認爲它可能會更安全。 –