Chmod问题使用python更改文件权限

时间:2014-12-16 08:03:56

标签: python windows python-2.7 chmod

我希望使用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

3 个答案:

答案 0 :(得分:5)

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

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)

答案 1 :(得分:3)

根据os.chmod documentation的注释:

  

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

答案 2 :(得分:1)

推荐的解决方案在Python3上不起作用(模块不可用)。我采用了另一种方法来使用Windows命令行。

就我而言,我需要“本地服务”帐户具有权限。我做到了:

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

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

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