Тестовые полномочия каталога в Python?

В Python в Windows, там способ определить, есть ли у пользователя разрешение получить доступ к каталогу? Я смотрел на os.access но это дает ложные результаты.

>>> 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

Я делаю что-то не так? Существует ли лучший способ проверить, есть ли у пользователя разрешение получить доступ к каталогу?

8
задан jww 7 July 2019 в 01:08
поделиться

2 ответа

Это может быть сложно для проверки на полномочия в Windows (остерегайтесь проблем в Vista с контролем учётных записей, например! - посмотрите этот связанный вопрос).

Вы говорите о простом доступе для чтения, т.е. читаете содержание каталога? Самый верный способ протестировать полномочия состоял бы в том, чтобы попытаться получить доступ к каталогу (например, сделать os.listdir) и поймайте исключение.

Кроме того, для путей, которые будут интерпретироваться правильно, необходимо использовать необработанные строки или выйти из обратных косых черт (' \\'), - или использовать наклонные черты вправо вместо этого.

(РЕДАКТИРОВАНИЕ: можно избежать наклонных черт в целом при помощи os.path.join - рекомендуемый способ создать пути)

7
ответ дан 5 December 2019 в 14:06
поделиться

В то время как os.access старается изо всех сил говорить, доступен ли путь или нет, он не утверждает, что был прекрасен. Из документов Python:

Примечание: Операции ввода-вывода могут перестать работать, даже когда доступ () указывает, что они успешно выполнились бы, особенно для операций в сетевых файловых системах, которые могут иметь семантику полномочий вне обычной модели бита полномочий POSIX.

Рекомендуемый способ узнать, есть ли у пользователя доступ, чтобы сделать независимо от того, что состоит в том, чтобы попытаться сделать это и поймать любые исключения, которые происходят.

5
ответ дан 5 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: