python3 pathlib mkdir权限被拒绝

时间:2019-08-11 23:05:46

标签: python-3.x filesystems

当我尝试在./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'

1 个答案:

答案 0 :(得分:1)

Pathlib需要一个八进制整数而不是十进制。您可以通过在模式位644前面加上0o(即0o644)来表示八进制。 644十进制转换为八进制的1204,这会强加您在此处看到的权限。

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

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

相关问题