2012-09-17 152 views
1

我想在Python中創建一個目錄,使用與shell的mkdir相同的權限。如何使用默認權限使用Python創建目錄?

standard Python documentation說:

os.mkdir(路徑[,模式])

創建數字模式模式一個名爲路徑。默認模式 是0777(八進制)。在某些系統上,模式被忽略。在使用它的地方, 首先將當前的umask值屏蔽掉。如果目錄已存在,則會引發OSError。

我不希望默認的0777權限,而是從父目錄繼承的權限。我可以做到這一點,而不需要查詢父目錄的權限?

回答

6

您已經獲得與shell的mkdir相同的權限。

隨着殼mkdir

對於每個目錄操作數時,MKDIR效用應執行等效於IEEE標準1003.1-2001的系統接口體積限定的MKDIR()函數的動作,稱爲具有以下參數:

dir操作數用作路徑參數。

將S_IRWXU,S_IRWXG和S_IRWXO的按位或值的值用作模式參數。 (如果指定了-m選項,模式選項參數的覆蓋此默認設置。)

或者,其可讀性(從BSD手冊頁):

...創建命名爲目錄操作數按指定的順序使用由當前umask(2)修改的模式rwxrwxrwx(0777)。

Python的os.mkdir做同樣的事情:

... [T]他默認模式爲0777 ...當前的umask值首先屏蔽掉。

Python實際上使用完全相同的參數調用shell文檔中提到的完全相同的POSIX mkdir函數。該功能定義爲:

新目錄的文件權限位應從模式初始化。模式參數的這些文件許可權位應由進程的文件創建掩碼進行修改。

或者,更可讀地,在FreeBSD/OS X手冊頁:

的目錄路徑與由模式指定,並限制了通過調用進程的umask的(2)的訪問權限創建。

如果你是一個非POSIX平臺如Windows上,巨蟒試圖模仿POSIX行爲,即使本機外殼有一個名爲mkdir命令的工作方式不同。主要是因爲主要的這種shell是Windows,它有一個mkdir這是md的同義詞,並且它甚至沒有記錄權限的細節。

+2

簡短的回答是:'os.mkdir(somepath)'產生與shell中的'mkdir「$ somepath」'相同的結果。 – jfs

+0

@ J.F.Sebastian:謝謝你指出,在給出完整答案之前,我沒有做出簡短的回答。編輯。 – abarnert

相關問題