python3 pathlib mkdir 权限被拒绝
python3 pathlib mkdir Permission denied
当我尝试在 ./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'
Pathlib 需要一个八进制整数而不是十进制整数。您可以通过在模式位 644
前加上 0o
来表示八进制,即 0o644
。 644
十进制转换为八进制的 1204
,这会施加您在那里看到的权限。
此外,要遍历目录结构,您需要对其具有读取和执行权限,因此我建议使用 0o755
而不是 0o644
。
Unix 命令行 chmod 假定为八进制,而您的 python pathlib 库则不然。希望这可以帮助。
当我尝试在 ./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'
Pathlib 需要一个八进制整数而不是十进制整数。您可以通过在模式位 644
前加上 0o
来表示八进制,即 0o644
。 644
十进制转换为八进制的 1204
,这会施加您在那里看到的权限。
此外,要遍历目录结构,您需要对其具有读取和执行权限,因此我建议使用 0o755
而不是 0o644
。
Unix 命令行 chmod 假定为八进制,而您的 python pathlib 库则不然。希望这可以帮助。