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

Cha*_*aos 5 python windows chmod python-2.7

我希望更改所有文件的文件权限,以使用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
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 8

根据os.chmod文档的注释:

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


Cha*_*aos 6

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

使用Python在Windows中设置文件夹权限

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)
Run Code Online (Sandbox Code Playgroud)


mac*_*etw 5

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

就我而言,我需要“LOCAL SERVICE”帐户才能获得许可。我做了:

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

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

另请注意,“LOCAL SERVICE”可能使用翻译名称。例如,在德语语言环境中,它是“Lokaler Dienst”。