【问题标题】:Change permission on files in python在python中更改文件的权限
【发布时间】:2019-05-25 00:09:47
【问题描述】:

我正在尝试执行以下操作:

编写检查“files”目录中每个文件的权限的代码。 如果“组”的权限不是“rwx”,则更改该文件的权限 如下: '用户' 可以 rwx, 'group' 可以 rwx, 'other' 什么都做不了。

我尝试了以下方法:

import os
import stat

path = '/home/myname/files'
for r, d, f in os.walk(path):
  for file in f:
    if not os.access(file, stat.S_IRWXU):
      print("User cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXU)
    if os.access(file, stat.S_IRWXG) == 0:
      print("Group cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXG)

但是,我注意到两件事。

  1. 无论我尝试什么,我都无法检查它是否不是 rwx。它会忽略 'if not',并且 '== 0' 也不起作用。
  2. 调用 S_IRWXU 会更改我想要的权限,但是当我稍后调用“S_IRWXG”时,用户权限会消失。这不是我想要的。 我该如何解决这两个问题?

【问题讨论】:

  • 您不能将stat.S_IRWXU 传递给os.access。您只能传递R_OKW_OKX_OK 的组合。见:docs.python.org/2/library/os.html#os.access
  • 你最好还是检查os.stat,因为你明确需要检查组权限,而os.access只检查当前用户是否有访问权限。

标签: python unix


【解决方案1】:

以下是我认为您应该修复代码的方法:

def isGroupRWX(file):
    # check the group bits of the file mode are all set (R, W and X)
    mode = os.stat(file).st_mode
    return (mode and 0b111000) == 0b111000

def fixPermissions(file):
    # set permissions for both user and group to RWX
    os.chmod(file, stat.S_IRWXG or stat.S_IRWXU)

您需要检查os.stat 以获取文件的模式,因为您需要明确检查组权限,而不仅仅是当前用户是否可以访问该文件。

您可以将模式组合传递给os.chmod,以便同时设置它们,从而解决您的第二个问题。

【讨论】:

  • 您能解释一下“isGroupRWX”中发生了什么吗?例如,我将如何自己应用它来做同样的事情,但我不想看“组”,而是想看“其他”?
  • 它将文件模式作为数值获取,然后屏蔽代表组权限的位,并检查它们是否都已设置。如果要检查“其他”,请将其更改为(mode and 0b111) == 0b111,因为“其他”位是最右边(最低有效)的 3 位。一个不错的参考:en.wikipedia.org/wiki/… - 请注意,该表中的“数字表示”是八进制的,而不是十进制的。
猜你喜欢
  • 2013-04-21
  • 2011-11-05
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2010-11-23
相关资源
最近更新 更多