Python3 Pathlib Mkdir 权限被拒绝

4
这段代码在试图在./test/下创建一个名为./test/123的子目录时出现了异常。经过检查权限,我发现由这段代码创建的./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'
1个回答

6

Pathlib希望使用八进制整数而不是十进制整数。您可以通过在模式位644前加上0o来表示八进制,即0o644644十进制转换为八进制后是1204,它会强制执行您在这里看到的权限。

此外,要遍历目录结构,您需要对其具有读取和执行权限,因此我建议使用0o755而不是0o644

Unix命令行chmod假定八进制,而您的python pathlib库则不是。希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接