Python 不执行path.mkdir()';如果路径已存在且模式已通过,则更新文件权限?

Python 不执行path.mkdir()';如果路径已存在且模式已通过,则更新文件权限?,python,python-3.x,chmod,docker-volume,777,Python,Python 3.x,Chmod,Docker Volume,777,我有一卷附加在kubernetes中,路径为/var/www/aaa/tmp 该卷是使用创建的,当前具有755权限。 它最初是用codepath.mkdir(parents=True,exist\u ok=True)创建的 我正在尝试在不删除现有路径的情况下更新其权限 我正在使用path.mkdir(parents=True,exist\u ok=True,mode=0o777)。我仍然面临与创建上述目录的flask应用程序的权限和获取502坏网关相关的问题 path.mkdir(parents

我有一卷附加在kubernetes中,路径为
/var/www/aaa/tmp

该卷是使用创建的,当前具有
755
权限。 它最初是用code
path.mkdir(parents=True,exist\u ok=True)
创建的

我正在尝试在不删除现有路径的情况下更新其权限

我正在使用path.mkdir(parents=True,exist\u ok=True,mode=0o777)。我仍然面临与创建上述目录的flask应用程序的权限和获取
502坏网关
相关的问题

path.mkdir(parents=True,exist\u ok=True,mode=0o777)
是否更新路径权限(如果它已经存在并且具有
755
权限)?或者它会像我们提到的那样完全忽略它吗?我看不到该路径的权限得到更新

我是否应该完全删除路径并使用创建新目录和设置权限的
mode=0o777
重新运行
path.mkdir…

编辑1: 我尝试在路径上使用
os.chmod()
。但是它抛出了
PermissionError

下面是代码片段

path.mkdir(parents=True, exist_ok=True)
os.chmod(path, mode=0o777)
错误:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
文件“/app/init.py”,第79行,在创建应用程序中 创建_目录(app)文件“/app/init.py”,第36行,在创建_目录中 os.chmod(路径,模式=0o777)PermissionError:[Errno 1]不允许操作:“/var/www/aaa/tmp”无法加载应用程序0 (装入点=“”)(未找到可调用或导入错误)*无应用程序 加载。游戏结束*


如果路径已经存在,您应该使用
os.chmod(路径,模式)
而不是删除/重新创建

例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
此外,
chmod
可以从
stat
模块获得权限

  • 统计数据− 在执行时设置用户ID
  • 统计S_ISGID− 在执行时设置组ID
  • 统计S_ENFMT− 强制执行记录锁定
  • 统计S_ISVTX− 执行后保存文本图像
  • 统计数据− 由所有者阅读
  • 统计S_IWRITE− 由所有者编写
  • 统计S_IEXEC− 由所有者执行
  • 统计S_IRWXU− 由所有者读取、写入和执行
  • 统计数字− 由所有者阅读
  • 统计S_IWUSR− 由所有者编写
  • 统计S_IXUSR− 由所有者执行
  • 统计S_IRWXG− 按组读取、写入和执行
  • 统计S_IRGRP− 分组阅读
  • 统计S_IWGRP− 分组写作
  • 统计S_IXGRP− 分组执行
  • 统计S_IRWXO− 由他人读、写和执行
  • 统计S_IROTH− 被别人阅读
  • 统计S_IWOTH− 别人写的
  • 统计数据− 由他人执行
例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
您可以使用按位运算符设置更多权限

例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
完成测试:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
编辑:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
如果您得到
PermissionError:[Errno 1]操作不允许:…
异常当您想用
os.chmod
更改权限时,您应该尝试以下代码部分来解决此问题。使用管理员权限运行脚本(在Linux环境中使用
sudo
)非常重要

代码:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
根据官方
chown
文件:

os.chown(路径,uid,gid,*,dir\u fd=None,follow\u symlinks=True)

将路径的所有者和组id更改为数字uid和gid。要保持其中一个ID不变,请将其设置为-1

此函数可以支持指定文件描述符、相对于目录描述符的路径以及不遵循符号链接

请参阅shutil.chown(),了解除接受数字ID外还接受名称的高级函数

可用性:Unix

版本3.3中新增:添加了对指定路径为打开文件描述符的支持,以及dir_fd和follow_符号链接参数

在版本3.6中更改:支持类似路径的对象


链接到文档:

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

例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
此外,
chmod
可以从
stat
模块获得权限

  • 统计数据− 在执行时设置用户ID
  • 统计S_ISGID− 在执行时设置组ID
  • 统计S_ENFMT− 强制执行记录锁定
  • 统计S_ISVTX− 执行后保存文本图像
  • 统计数据− 由所有者阅读
  • 统计S_IWRITE− 由所有者编写
  • 统计S_IEXEC− 由所有者执行
  • 统计S_IRWXU− 由所有者读取、写入和执行
  • 统计数字− 由所有者阅读
  • 统计S_IWUSR− 由所有者编写
  • 统计S_IXUSR− 由所有者执行
  • 统计S_IRWXG− 按组读取、写入和执行
  • 统计S_IRGRP− 分组阅读
  • 统计S_IWGRP− 分组写作
  • 统计S_IXGRP− 分组执行
  • 统计S_IRWXO− 由他人读、写和执行
  • 统计S_IROTH− 被别人阅读
  • 统计S_IWOTH− 别人写的
  • 统计数据− 由他人执行
例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
您可以使用按位运算符设置更多权限

例如:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
完成测试:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
编辑:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
如果您得到
PermissionError:[Errno 1]操作不允许:…
异常当您想用
os.chmod
更改权限时,您应该尝试以下代码部分来解决此问题。使用管理员权限运行脚本(在Linux环境中使用
sudo
)非常重要

代码:

import os

os.chmod("/var/www/aaa/tmp", 0o777)
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
from getpwnam import pwd
from getgrnam import grp
import os

uid = getpwnam("USERNAME")[2]
gid = grp.getgrnam("GROUPNAME")[2]
os.chown("/var/www/aaa/tmp", uid, gid)
根据官方