path.mkdir()是否更新文件权限(如果路径已经存在并且已通过模式?

问题描述 投票:1回答:1

我在kubernetes中附加了一个路径为/var/www/aaa/tmp的卷。

该卷是使用path.mkdir()创建的,当前具有755权限。它最初是使用代码path.mkdir(parents=True, exist_ok=True)创建的。

我正在尝试更新其权限而不删除现有路径。

我正在使用path.mkdir(parents=True, exist_ok=True, mode=0o777)。我仍然面临与权限相关的问题,并且正在创建上述目录的flask应用程序获取502 Bad gateway

path.mkdir(parents=True, exist_ok=True, mode=0o777)是否更新路径权限(如果已经存在并且具有755权限?还是像我们提到的exists_ok=True一样完全忽略它?我看不到该路径的权限正在更新。

我应该完全删除路径,然后用path.mkdir.....重新运行mode=0o777来创建新目录并设置权限吗?

python python-3.x chmod docker-volume 777
1个回答
0
投票

如果路径已经存在,则应使用os.chmod(path, mode)而不是删除/重新创建。

例如:

import os

os.chmod("/var/www/aaa/tmp", 777)

此外,chmod可以从stat模块获得许可。

  • stat.S_ISUID-在执行时设置用户ID。
  • stat.S_ISGID-在执行时设置组ID。
  • stat.S_ENFMT-强制执行记录锁定。
  • stat.S_ISVTX-执行后保存文本图像。
  • stat.S_IREAD-由所有者读取。
  • stat.S_IWRITE-由所有者写。
  • stat.S_IEXEC-由所有者执行。
  • stat.S_IRWXU-所有者读取,写入和执行。
  • stat.S_IRUSR-由所有者读取。
  • stat.S_IWUSR-由所有者写。
  • stat.S_IXUSR-由所有者执行。
  • stat.S_IRWXG-按组读取,写入和执行。
  • stat.S_IRGRP-按组读取。
  • stat.S_IWGRP-按组写入。
  • stat.S_IXGRP-按组执行。
  • stat.S_IRWXO-由其他人读取,写入和执行。
  • stat.S_IROTH-被其他人读取。
  • stat.S_IWOTH-由其他人编写。
  • stat.S_IXOTH-由其他人执行。

例如:

import os
import stat

# Set a file write by others.
os.chmod("/var/www/aaa/tmp", stat.S_IWOTH)

您可以使用按位运算符设置更多权限。

例如:

import os
import stat

os.chmod(
    '/var/www/aaa/tmp',
    stat.S_IRUSR |
    stat.S_IROTH |
    stat.S_IRGRP 
)

完整测试:

>>> touch test_perm.sh
>>> ll test_perm.sh
-rw-rw-r-- test_perm.sh
>>> python -c "import os; os.chmod('test_perm.sh', 0755)"
>>> ll test_perm.sh
-rwxr-xr-x test_perm.sh
© www.soinside.com 2019 - 2024. All rights reserved.