powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: нужно проверить права доступа к директории (OS Windows)
5 сообщений из 5, страница 1 из 1
Python: нужно проверить права доступа к директории (OS Windows)
    #39339255
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос: и как же это лучше сделать? (проверяем для пользователя, запустившего скрипт)
в идеале мне бы подошел функционал os.access(), но в Windows 7 он не работает (нет поддержки effective user id)

пока попробовала следующее и привожу результаты

(a)
пробуем и os.access() и с опцией effective_ids=True и получаем ошибку
Код: python
1.
2.
3.
4.
5.
6.
print(os.access(test_dir, os.F_OK, effective_ids=True))
"""
возвращает
NotImplementedError: access: effective_ids unavailable on this platform
не подходит: мне нужен результать именно для пользователя, запустившего скрипт
"""


(b)
пробуем и os.access() c опцией effective_ids=False
Код: python
1.
2.
3.
4.
5.
6.
print(os.access(test_dir, os.F_OK, effective_ids=False))
"""
возвращает
True
не совсем подходит: мы знаем, что папка существует, но мы также хотим знать, что же там можно сделать, и os.access() здесь не помощник (но вопрос существования папки решился, это плюс)
"""


(c)
пробуем os.path
Код: python
1.
2.
3.
4.
5.
6.
print(os.path.isdir(test_dir), os.path.exists(test_dir))
"""
возвращает
True, False
не совсем подходит: мне нужно проверять отдельно read and write permissions
"""
...
Рейтинг: 0 / 0
Python: нужно проверить права доступа к директории (OS Windows)
    #39339373
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,
1) Существование директории, наверное лучше всего проверять
os.path.isdir(directory_name)

2) Проверка Read Permission для директории ???

3) Проверка Write Permission для директории ???
...
Рейтинг: 0 / 0
Python: нужно проверить права доступа к директории (OS Windows)
    #39339421
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import os
import random

class Directory_Permissions():
    def __init__(self, directory_location):
        
        def isReadable(dir_location):
            if not os.path.isdir(dir_location):
                return False
            try:
                os.path.getatime(dir_location)
            except PermissionError:
                return False
            else:
                return True
            
        def isWritable(dir_location):
            if not os.path.isdir(dir_location):
                return False            
            tmp_file = "tmp" + str( random.randint(1000, 9999) ) + "_"
            tmp_location = os.path.join(dir_location, tmp_file)
            try:
                fp = open(tmp_location, "w")
            except PermissionError:         
                return False
            else:
                fp.close()
                os.remove(tmp_location)
                return True
            
            
        self.dlocation = directory_location
        self.exists = os.path.isdir(self.dlocation)      
        self.isReadable = isReadable(self.dlocation)
        self.isWritable = isWritable(self.dlocation)
        
if __name__=='__main__':
    dir_location = r"C:\Test01"
    test = Directory_Permissions(dir_location)
    print("Checking permissions: {}".format(test.dlocation))
    print(test.exists, test.isReadable, test.isWritable)



критика и альтернативные решения приветствуются
...
Рейтинг: 0 / 0
Python: нужно проверить права доступа к директории (OS Windows)
    #39341246
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,

А где варианты с os.access(os.R_OK) и os.W_OK? Они проверялись и не работают (и почему тогда их в примере нет)? Или не проверялись даже?

Ну и не совсем понятно, где вы с effective/real UID путаетесь. Потому что "для пользователя, запустившего скрипт" - это real uid. А effective uid - это "пользователь, с правами которого сейчас выполняется скрипт". Они вообще обычно совпадают, если не делать лишних (os-specific) телодвижений. Для windows это будет где-то рядом с ImpersonateUser и т.п. А если вы что-то подобное все же делаете, ваш второй код не верен, потому что он будет проверять права для "имперсонифицированного" пользователя (os.access по идее тоже) а не того, кто изначально запустил скрипт.
...
Рейтинг: 0 / 0
Python: нужно проверить права доступа к директории (OS Windows)
    #39341300
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
maxkarmini.weblab,
А где варианты с os.access(os.R_OK) и os.W_OK? Они проверялись и не работают (и почему тогда их в примере нет)? Или не проверялись даже?

они проверялись, но не дали желаемого результата. проблема описана в первом посте (а): NotImplementedError: access: effective_ids unavailable on this platform.

Если запускать os.access() с опцией effective_ids=False, то мы получаем True для любой существующей папки вне зависимости от прав доступа, и False для несуществующей. Т.е. папка существует и теоретически в нее можно заглянуть и что-то записать, примерно так. :)

2.
я тоже думала, что os.access() по идее, а на практике оказалось, что нет. :)
в Windows функция os.access() работает некорректно, поэтому я пробую альтернативные решения.
Интересует effective UID: т.е. все просто, скрипт запускается и работает от имени одного пользователя, и мы хотим проверить есть ли у данного пользователя права чтения-записи в определенную папку.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: нужно проверить права доступа к директории (OS Windows)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]