使用os.chmod删除特定权限

时间:2014-09-23 06:38:47

标签: python unix permissions

我们如何使用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.

但我无法弄清楚所有的操作

2 个答案:

答案 0 :(得分:9)

冷却。所以秘诀是你首先需要获得当前的权限。这有点乱,但它确实有效。

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标志,这将为您提供要使用的新号码:

os.chmod("x", current & ~stat.S_IEXEC)

如果您不熟悉bit twiddling,&只接受这两个数字所具有的位,~将数字的位反转。因此,x & ~y会获取x所拥有且y 所拥有的那些位。

答案 1 :(得分:0)

如果你想使用os.chmod(),你可以使用下面的代码:

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)