如何使用os.chmod为所有人删除特定的权限?
简而言之,我们如何使用os.chmod编写以下代码
chmod a-x filename
我知道我们可以给现有的权限添加权限,也可以删除。
In [1]: import os, stat
In [5]: os.chmod(file, os.stat(file).st_mode | stat.S_IRGRP) # Make file group readable.
但是我无法弄清楚执行所有操作的方法
如何使用os.chmod为所有人删除特定的权限?
简而言之,我们如何使用os.chmod编写以下代码
chmod a-x filename
我知道我们可以给现有的权限添加权限,也可以删除。
In [1]: import os, stat
In [5]: os.chmod(file, os.stat(file).st_mode | stat.S_IRGRP) # Make file group readable.
但是我无法弄清楚执行所有操作的方法
current = stat.S_IMODE(os.lstat("x").st_mode)
这个想法是使用lstat.st_mode
获取标志,但需要将其裁剪到chmod
可接受的范围内:
help(stat.S_IMODE)
#>>> Help on built-in function S_IMODE in module _stat:
#>>>
#>>> S_IMODE(...)
#>>> Return the portion of the file's mode that can be set by os.chmod().
#>>>
然后你可以使用一些位运算操作去除stat.S_IEXEC
标志,这将给你一个新的数字来使用:
那么您可以使用一些位运算操作来去除stat.S_IEXEC
标志,这将为您提供新的数字以使用:
os.chmod("x", current & ~stat.S_IEXEC)
如果您对位运算不熟悉,&
只会取两个数字共有的那些位,~
会反转一个数字的所有位。所以 x & ~y
会取得 x
有而 y
没有 的那些位。
import os
for dir_path, dir_names, files in os.walk('.'):
for file in files:
abs_path = os.path.join(dirpath, file)
os.chmod(abs_path, 0o755)
chmod
如何实现这个功能;它需要采取哪些步骤来从现有的八进制权限值中删除一个权限? - Martijn Pieters