使用Python更改文件权限的Chmod问题

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
3个回答

13

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

使用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)

我们允许访问的目录是:M:\intra\EU吗? 我需要在LookupAccountName中放入我的凭证吗? - Imad
1
这些模块在Python3中似乎不可用。我在这里发布了另一种方法作为另一个答案。 - macetw

9
根据os.chmod文档的注释:
尽管Windows支持chmod(),但你只能使用它来设置文件的只读标志(通过stat.S_IWRITEstat.S_IREAD常数或相应的整数值)。所有其他位都被忽略。

谢谢falsetru,还有其他解决方案吗?我如何设置权限,以便其他用户可以编辑使用某些Python脚本创建的文件。我的Python脚本在共享目录中创建一些文件,我希望其他人也能够编辑这些文件。由于这是大量文件,我无法手动完成。有什么想法可以在Windows中实现这一点吗? - Chaos

7
推荐的解决方案在Python3上无法使用(模块不可用)。我采取了不同的方法,使用Windows命令行。
在我的情况下,我需要让“LOCAL SERVICE”帐户拥有权限。我执行了以下操作:
    import subprocess
    args = ["icacls", directory,
            "/grant:r", 'LOCAL SERVICE:(OI)(CI)MF']
    subprocess.check_call(args)

请注意,此权限似乎仅在目录上设置时才有效。出于安全原因,还应确保“directory”实际存在。
另请注意,“LOCAL SERVICE”可能会使用翻译后的名称。例如,在德语区域设置中,它是“Lokaler Dienst”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接