2009-02-11 71 views
7

在Windows上的Python中,有沒有一種方法可以確定用戶是否有權訪問目錄?我看了一下os.access,但它給出了錯誤的結果。Python - 測試目錄權限

>>> os.access('C:\haveaccess', os.R_OK) 
False 
>>> os.access(r'C:\haveaccess', os.R_OK) 
True 
>>> os.access('C:\donthaveaccess', os.R_OK) 
False 
>>> os.access(r'C:\donthaveaccess', os.R_OK) 
True 

我做錯了什麼?有沒有更好的方法來檢查用戶是否有權訪問目錄?

+1

第一次和第三次訪問失敗,因爲\ h被解釋爲一個(無效)轉義序列 – 2009-02-11 22:34:31

回答

7

在Windows中檢查權限可能很複雜(例如,在Vista中使用UAC提防問題! - 請參閱此related question)。

您是否在談論簡單的讀取權限,即讀取目錄的內容? 測試權限的最可靠方法是嘗試訪問該目錄(例如,執行os.listdir)並捕獲該異常。

此外,爲了正確解釋路徑,您必須使用原始字符串或轉義反斜槓('\\'),或者使用正斜槓代替。

(編輯:您完全可以通過使用os.path.join避免斜槓 - 推薦的方式來建立路徑)

+0

好的答案,但在最後一點,使用os.path.join或os.path.sep比創建手動路徑。 – 2009-02-11 23:02:32

+0

完美適用於我的目的。謝謝! – Sean 2009-02-11 23:17:55

5

雖然os.access會盡可能告訴我們,如果一個路徑訪問或沒有,它不要求要完美。從Python文檔:

注:I /當進入()表示,他們 會成功,特別是在網絡文件系統 操作 可能有權限語義 超出了通常的POSIX O操作可能會失敗,甚至 許可位 模型。

推薦的方法是找出用戶是否有權做任何事情來嘗試去做,並捕獲發生的任何異常。

0

實際上'C:\ haveaccess'不同於r'C:\ haveaccess'。 從Python的角度來看'C:\ haveaccess'不是一個有效的路徑,所以使用'C:\\ haveaccess'來代替。 我認爲os.access工作得很好。