2012-01-12 88 views
2

在Python中,glob忽略“权限被拒绝”错误。不幸的是,我需要知道是否有一个我无法阅读的目录。glob,但不要忽略“权限被拒绝”

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

例子:

[email protected]:~ 
===> python 
>>> import glob 
>>> glob.glob('/root/*') 
[] 

有在/根目录的文件,但用户@ PC不允许读取此目录。

单个异常是不够的。例如glob.glob('/var/log/*/*.log')。我想知道哪些目录存在,但无法读取。

+0

你认为什么样的权限被忽略(读,写,执行)?你只需要检查给定的目录名是否存在? – jcollado 2012-01-12 09:18:59

+0

我为这个问题增加了一个例子。 – guettli 2012-01-12 09:35:23

回答

2

一个办法让所有的目录,并且无法读取确实使用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的用例。