Dav*_*ave 4 python permissions parent mkdir pathlib
我正在使用 pathlib 设置文件夹结构,我希望将树中所有文件夹的权限设置为 drwxrwx--- (770)。
我当前的代码是:
p=Path('name/{}/{}/{}/category'.format(year,month,day))
pp=Path('name/{}/{}/{}'.format(year,month,day))
p.mkdir(mode=0o770,parents=True,exist_ok=True)
Run Code Online (Sandbox Code Playgroud)
我需要exist_ok=True因为我希望在循环category值时使用同一条线。但是,在测试时我正在删除这些文件夹。
跑完之后,
oct(p.stat().st_mode)
0o40770
oct(pp.stat().st_mode)
0o40775
Run Code Online (Sandbox Code Playgroud)
即,父目录的默认权限为777(umask=002)。
我能想到的解决这个问题的唯一方法(似乎效率很低)是:
p.mkdir(mode=0o770,parents=True,exist_ok=True)
os.system("chmod -R 770 {}".format(name))
Run Code Online (Sandbox Code Playgroud)
有没有办法通过调用应用所需的权限Path().mkdir(),或者os.system()调用是不可避免的吗?
的文档提到Path.mkdir了这种行为:
如果
parents为 true,则根据需要创建该路径的任何缺失的父路径;它们是使用默认权限创建的,而不考虑模式(模仿 POSIX mkdir -p 命令)。
避免这种情况的一种方法是迭代每个路径parts或parents您自己,在每个路径上调用mkdirwithexists_ok但不调用parents。这样,仍然会创建丢失的目录,但mode会考虑在内。那看起来像:
for parent in reversed(p.parents):
parent.mkdir(mode=0o770, exist_ok=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3125 次 |
| 最近记录: |