【问题标题】:Chmod issue to change file permission using python使用 python 更改文件权限的 Chmod 问题
【发布时间】:2015-02-14 11:52:30
【问题描述】:

我希望使用 python 脚本更改所有文件的文件权限,以便为目录中的所有用户读写和执行。但是,在我通过右键单击检查文件权限时运行脚本后,它只显示我和每个人的权限,它只有读取权限。我在以下脚本中做错了什么吗:

import os
import pdb

for dirpath, dirnames, filenames in os.walk('M:\intra\EU'):
    for filename in filenames:
        path = os.path.join(dirpath, filename)
        os.chmod(path, 0o777) # for example

【问题讨论】:

    标签: python windows python-2.7 chmod


    【解决方案1】:

    推荐的解决方案不适用于 Python3(模块不可用)。我采取了不同的方法,使用 Windows 命令行。

    就我而言,我需要“本地服务”帐户才能获得权限。我做到了:

        import subprocess
        args = ["icacls", directory,
                "/grant:r", 'LOCAL SERVICE:(OI)(CI)MF']
        subprocess.check_call(args)
    

    请注意,此权限似乎仅在对目录设置时才有效。出于安全原因,确保“目录”确实存在也是一个好主意。

    另请注意,“本地服务”可能是翻译后的名称。例如,在德语语言环境中,它是“Lokaler Dienst”。

    【讨论】:

      【解决方案2】:

      我在这里找到了解决方案:)

      Setting folder permissions in Windows using Python

      import win32security
      import ntsecuritycon as con
      import os
      import pdb
      userx, domain, type = win32security.LookupAccountName ("", "Everyone")
      directory='M:\intra\EU'
      for dirpath, dirnames, filenames in os.walk('M:\intra\EU'):
          for FILENAME in filenames:
              sd = win32security.GetFileSecurity(directory+'\\'+FILENAME, win32security.DACL_SECURITY_INFORMATION)
              dacl = sd.GetSecurityDescriptorDacl()   # instead of dacl = win32security.ACL()
              dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, userx)
              sd.SetSecurityDescriptorDacl(1, dacl, 0)
              win32security.SetFileSecurity(directory+'\\'+FILENAME, win32security.DACL_SECURITY_INFORMATION, sd)
      

      【讨论】:

      • 是我们允许访问的目录; M:\内部\欧盟'?我必须将我的凭据放入 LookupAccountName 吗?
      • 这些模块在 Python3 中似乎不可用。我在这里发布了另一种方法作为另一个答案。
      【解决方案3】:

      根据os.chmod documentation的注释:

      虽然 Windows 支持 chmod(),但您只能设置文件的 带有它的只读标志(通过stat.S_IWRITEstat.S_IREAD 常量或相应的整数值)。所有其他位是 忽略。

      【讨论】:

      • 谢谢 falsetru,有没有其他解决方案,我如何设置权限,以便其他用户可以编辑我使用一些 python 脚本创建的文件。我的 python 脚本在共享目录中创建了一些文件,我希望其他人也能够编辑这些文件。我不能手动完成,因为这些文件很多。任何想法如何在 Windows 中实现这一目标
      猜你喜欢
      • 2016-01-20
      • 1970-01-01
      • 2015-06-15
      • 2013-02-26
      • 2014-03-04
      • 2013-06-19
      • 2011-07-01
      • 2012-04-28
      • 2016-10-14
      相关资源
      最近更新 更多