глобус, но не игнорируйте "отказано в разрешении" - PullRequest
2 голосов
/ 12 января 2012

в глобусе Python игнорирует ошибки «Отказано в доступе». К сожалению, мне нужно знать, был ли каталог, который я не могу прочитать.

Я мог бы использовать os.walk () и fnmatch, но, возможно, есть лучшее решение?

Пример:

user@pc:~
===> python
>>> import glob
>>> glob.glob('/root/*')
[]

Есть файлы в / root, но пользователь @ pc не может читать этот каталог.

Одного исключения будет недостаточно. Например glob.glob('/var/log/*/*.log'). Я хочу знать, какие каталоги существуют, но не читаются.

1 Ответ

3 голосов
/ 12 января 2012

Один из способов получить все каталоги и файлы, которые не могут быть прочитаны, действительно использовать os.walk для рекурсивного обхода дерева каталогов, а затем, для каждого каталога и файла, проверять разрешения с помощью os.access

import os

unreadable_dirs = []
unreadable_files = []

for dirpath, dirnames, filenames in os.walk('/var/log'):
  for dirname in dirnames:
    dirname = os.path.join(dirpath, dirname)
    if not os.access(dirname, os.R_OK):
      unreadable_dirs.append(dirname)
  for filename in filenames:
    filename = os.path.join(dirpath, filename)
    if not os.access(filename, os.R_OK):
      unreadable_files.append(filename)

print 'Unreadable directories:\n{0}'.format('\n'.join(unreadable_dirs))
print 'Unreadable files:\n{0}'.format('\n'.join(unreadable_files))

Примечание. Вы можете написать свою собственную рекурсивную функцию, которая пересекает структуру каталогов, но в основном вы будете дублировать функциональность os.walk, поэтому я не вижу варианта использования для glob.glob.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...