Python MKDIR дает мне неправильные разрешения - PullRequest
9 голосов
/ 26 октября 2009

Я пытаюсь создать папку и создать в ней файл.

Всякий раз, когда я создаю эту папку (через Python), она создает папку, которая вообще не дает мне никаких прав и только для чтения.

Когда я пытаюсь создать файл, я получаю IOError.

Error:  <type 'exceptions.IOError'>

Я попытался создать (и найти) описание всех других режимов (кроме 0770).

Кто-нибудь может дать мне свет? Какие другие коды режимов?

Ответы [ 4 ]

18 голосов
/ 26 октября 2009

После создания папки вы можете установить разрешения с помощью os.chmod

Мод написан в базе 8, если вы конвертируете его в двоичный файл, это будет

000 111 111 000
    rwx rwx rwx

Первый rwx для владельца, второй для группы и третий для мира

г = чтение, W = писать, х = выполнить

Чаще всего вы видите разрешения
7 чтение / запись / выполнение - вам нужно выполнить каталоги, чтобы увидеть содержимое
6 чтение / запись
4 только для чтения

Когда вы используете os.chmod, имеет смысл использовать восьмеричную запись так

os.chmod('myfile',0o666)  # read/write by everyone
os.chmod('myfile',0o644)  # read/write by me, readable for everone else

Помните, я говорил, что обычно вы хотите, чтобы каталоги были "исполняемыми", чтобы вы могли видеть их содержимое.

os.chmod('mydir',0o777)  # read/write by everyone
os.chmod('mydir',0o755)  # read/write by me, readable for everone else

Примечание. Синтаксис 0o777 предназначен для Python 2.6 и 3+. в противном случае для 2 серии это 0777. 2.6 принимает любой синтаксис, поэтому выбранный вами будет зависеть от того, хотите ли вы использовать прямую или обратную совместимость.

5 голосов
/ 26 октября 2009

У тебя, наверное, странный умаск. Попробуйте os.umask(0002), прежде чем создавать каталог.

3 голосов
/ 27 октября 2009

Руководство по Python гласит:

os.mkdir(path[, mode])

Создать каталог с именем path в режиме числового режима. Режим по умолчанию - 0777 (восьмеричное). В некоторых системах режим игнорируется. Где это используется, текущее значение маски сначала маскируется. Наличие: Unix, Windows.

Вы указали режим - какой режим вы указали. Вы рассматривали возможность указания режима в явном виде? И какое значение umask программы установлено в "

1 голос
/ 27 октября 2009

Так как вы на Windows, это может быть crapshoot. Убедитесь, что нет никаких дурацких специальных разрешений для родительского каталога или с параметрами политики, которые определяют разрешения, которые получают любые каталоги, созданные вашей учетной записью. Я сомневаюсь, что это проблема Python, так как я не смог воссоздать проблему в Windows с относительно плохой установкой Vista.

...