glob,但不要忽略“权限被拒绝”

时间:2012-01-12 08:29:56

标签: python glob

Python中的

忽略了“Permission denied”错误。不幸的是,我需要知道是否有一个我无法阅读的目录。

我可以使用os.walk()和fnmatch,但也许有更好的解决方案?

示例:

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

/ root中有文件,但不允许用户@ pc读取此目录。

单一例外是不够的。例如glob.glob('/var/log/*/*.log')。我想知道哪些目录存在,但是不可读。

1 个答案:

答案 0 :(得分:3)

获取所有无法读取的目录和文件的一种方法是使用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的用例。