我正在尝试使用 os.listdir 来获取子目录列表,但是当我缺少这些子目录之一的权限时遇到了问题。我无法获得许可,所以我想尽可能优雅地继续。理想情况下,我可以忽略任何我无权访问的目录并返回任何其他目录,以免错过任何子目录。
我尝试过使用 os.walk,但遇到了许多其他问题(包括性能)并决定不使用它。
一个例子。在根目录下有 3 个孩子,a,b,c
root dir
|
----> dir a
|
----> dir b
|
----> dir c
我对 a 和 c 有权限,但对 b 没有权限(事先不知道)。我想返回 [a, c]
这是带有一些概括的代码-
def get_immediate_subdirectories(directory):
"""Returns list of all subdirectories in
directory
Args:
directory: path to directory
Returns:
List of child directories in directory excluding
directories in exclude and any symbolic links
"""
exclude = ["some", "example", "excluded", "dirnames"]
sub_dirs = []
try:
all_files = os.listdir(directory)
except OSError:
# **Ideally I'd be able to recover some list here/continue**
for name in all_files:
if name in exclude:
continue
full_path = os.path.join(directory, name)
if os.path.isdir(full_path):
# Keep these separate to avoid issue
if not os.path.islink(full_path):
sub_dirs.append(name)
return sub_dirs