2

pathlib を使用して、ファイルを再帰的にグロブおよび/または検索しようとしています。私の制御不能なファイルシステムの管理が不十分なため、ファイルのアクセス許可とグループがいたるところにあります。

この問題は、rglob が降りようとするディレクトリへのアクセス許可とグループ メンバーシップの両方が不足している場合に発生します。Rglob は KeyError をスローし、次に PermissionError をスローし、最後に完全に停止します。これから正常に回復してグロビングを続ける方法はありません。

私が望む動作は、rglob がアクセス許可を持っていないディレクトリをスキップし、アクセス許可があった/見たすべてのリストを生成することです。この特定のケースでは、実行のたびに何らかのディレクトリまたは別のディレクトリに対して不適切なアクセス許可を持っていることがほぼ保証されているため、すべてか無かという性質は私をそれほど遠くまで連れて行くことはありません。

詳細:

Python: Linux 用のソースからコンパイルされた 3.4.1

グロビングしているファイルシステム: 自動マウントされた nfs 共有

再現方法:

mkdir /tmp/path_test && cd /tmp/path_test && mkdir dir1 dir2 dir2/dir3 && touch dir1/file1 dir1/file2 dir2/file1 dir2/file2 dir2/dir3/file1
su
chmod 700 dir2/dir3/
chown root:root dir2/dir3/
exit

python3.4.1

from pathlib import Path
p = Path('/tmp/path_test')
for x in p.rglob('*') : print(x)
4

1 に答える 1

2

最初は、次のような結果が得られましたが、手動で反復しようとしましたrglob():

from pathlib import Path
p = Path('/tmp/path_test')
files = p.rglob('*')
while True:
    try:
        f = next(files)
    except (KeyError, PermissionError):
        continue
    except StopIteration:
        break
    print(f)

しかし、最初の の後にa をnext(files)スローするように見えるので、その後はファイルを取得しません。StopIterationPermissionError

os.walk()を使用したほうがよい場合があります。

于 2015-05-07T17:53:12.297 に答える