Py学习  »  Python

python3 pathlib mkdir权限被拒绝

Ziqi Liu • 6 年前 • 1008 次点击  

当我试图创建子目录时,此代码引发了异常 ./test/123 在下面 ./test/ . 在检查了许可之后,我发现 ./test 由此代码创建的 d-w----r-- ,这很奇怪…如果我在终端中mkdir,该dir将 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'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38885
文章 [ 1 ]  |  最新文章 6 年前
Colin Garvey
Reply   •   1 楼
Colin Garvey    6 年前

Pathlib需要一个八进制整数而不是十进制。您可以通过预先设置模式位来表示八进制 644 具有 0o ,即 0o644 . 六百四十四 小数转换为 1204 在八进制中,它赋予您在那里看到的权限。

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

UNIX命令行chmod采用八进制,而python pathlib库则不采用八进制。希望这有帮助。