我希望使用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
答案 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_IWRITE
和stat.S_IREAD
常数或相应的整数值)。所有其他位都是 忽略。
答案 2 :(得分:1)
推荐的解决方案在Python3上不起作用(模块不可用)。我采用了另一种方法来使用Windows命令行。
就我而言,我需要“本地服务”帐户具有权限。我做到了:
import subprocess
args = ["icacls", directory,
"/grant:r", 'LOCAL SERVICE:(OI)(CI)MF']
subprocess.check_call(args)
请注意,此权限似乎仅在目录上设置时有效。出于安全原因,确保“目录”确实存在也是一个好主意。
还请注意,“本地服务”可能使用翻译后的名称。例如,在德国语言环境中,它是“ Lokaler Dienst”。