当我尝试在./test/123
下创建子目录./test/
时,此代码引发了异常。在检查了权限之后,我发现此代码创建的目录./test
具有d-w----r--
,这很奇怪...如果我在终端中使用mkdir,则该目录将具有drwxr-xr-x
权限。
from pathlib import Path
if __name__ == '__main__':
p1 = Path('./test')
p1.mkdir(644, parents=True, exist_ok=True)
p2 = Path('./test/123')
p2.mkdir(644, parents=True, exist_ok=True)
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1267, in mkdir
if not exist_ok or not self.is_dir():
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1358, in is_dir
return S_ISDIR(self.stat().st_mode)
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1168, in stat
return self._accessor.stat(self)
PermissionError: [Errno 13] Permission denied: 'test/123'
答案 0 :(得分:1)
Pathlib需要一个八进制整数而不是十进制。您可以通过在模式位644
前面加上0o
(即0o644
)来表示八进制。 644
十进制转换为八进制的1204
,这会强加您在此处看到的权限。
此外,要遍历目录结构,您需要对其具有读取和执行权限,因此我建议使用0o755
而不是0o644
。
Unix命令行chmod假定八进制,而python pathlib库则假定八进制。希望这可以帮助。