2012-01-12 16 views
2

Python globで "Permission denied"エラーは無視されます。残念ながら私は読むことができないディレクトリがあるかどうかを知る必要があります。globですが、 "permission denied"を無視しません。

私はos.walk()とfnmatchを使うことができましたが、もっと良い解決策がありますか?

例:

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

そこに/ルートファイルがありますが、PC @ユーザーはこのディレクトリを読み取ることが許可されていません。

単一の例外では不十分です。たとえば、glob.glob('/var/log/*/*.log')です。どのディレクトリが存在するのかを知りたいが、読めない。

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

注:読み取ることができないすべてのディレクトリとファイルを取得する

+0

どのような種類のパーミッションは無視されていると思いますか(読み込み、書き込み、実行)?指定されたディレクトリ名が存在するかどうかを確認するだけですか? – jcollado

+0

質問に例を追加しました。 – guettli

答えて

2

一つの方法は、os.accessを使用して、すべてのディレクトリとファイルのために、その後、チェック権限を再帰的にディレクトリツリーを横断するos.walkを使用して実際にあります:ディレクトリ構造を横断する独自の再帰関数を書くこともできますが、基本的にはos.walkの機能を複製するので、glob.globの使用例は表示されません。

関連する問題