【问题标题】:Handling lack of permissions/groups with pathlib's rglob使用 pathlib 的 rglob 处理缺少权限/组
【发布时间】:2015-07-17 23:00:30
【问题描述】:

我正在尝试使用 pathlib 递归地 glob 和/或查找文件。由于我无法控制的文件系统管理不善,文件权限和组到处都是。

当我缺乏 rglob 尝试进入的目录的权限和组成员身份时,就会出现问题。 Rglob 抛出 KeyError 和 PermissionError 并最终完全停止。我看不出有什么办法可以优雅地恢复并继续 globbing。

我想要的行为是让 rglob 跳过我没有权限的目录并生成它看到/有权访问的所有内容的列表。在这种特殊情况下,全有或全无的性质不会让我走得太远,因为我几乎可以保证每次运行时对某个目录或另一个目录都拥有错误的权限。

更多细节:

Python:3.4.1 编译自 linux 源代码

我正在查找的文件系统:自动挂载的 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)

【问题讨论】:

    标签: python permissions pathlib


    【解决方案1】:

    起初我尝试手动迭代 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)
    

    但看起来next(files) 在第一个PermissionError 之后抛出了StopIteration,所以在那之后我没有得到任何文件。

    使用os.walk() 可能会更好。

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2021-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2016-08-09
      • 2021-12-31
      • 2021-08-24
      相关资源
      最近更新 更多