gpt4 book ai didi

python - 使用 Python 的 Windows 10 中的文件权限

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:03 28 4
gpt4 key购买 nike

问题:如何使用 Python 脚本更改 Windows 10 PC 上的文件权限?

我写了一个Python script它采用专有软件创建的文件夹,并将它们移动到带有 shutil.move() 的网络驱动器上。 。

似乎专有软件默认创建只读文件夹。我需要更改这些文件夹的文件权限才能 shutil.move()将文件夹复制到网络驱动器后将其删除。

我搜索过SO发现os.chmod(path, 0o777)仅适用于授予 Unix 系统上的访问权限。在 Windows 上,它修改文件或文件夹的只读属性。 This question似乎产生了一个解决方案,我尝试如下:

import win32security
import ntsecuritycon as con

account = r"admin"

userx, domain, type = win32security.LookupAccountName ("", account)
sd = win32security.GetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl() # instead of dacl = win32security.ACL()
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, userx)
sd.SetSecurityDescriptorDacl(1, dacl, 0) # may not be necessary
win32security.SetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION, sd)

但是好像不行。另外,我不明白我在使用模块win32security做什么和ntsecuritycon 。也许有人可以给出一个简单的解释。

编辑:好的,所以我看了一些东西。这是引发的异常:

Traceback (most recent call last):
File "copyscript.py", line 108, in <module>
copyscript()# the loop needs to be called as a function to delete all assigned variables after each loop
File "copyscript.py", line 93, in copyscript
shutil.move(run, str(target_dir2))#move files renamed to user folder
File "C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 550, in move
rmtree(src)
File "C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 488, in rmtree
return _rmtree_unsafe(path, onerror)
File "C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 378, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 383, in _rmtree_unsafe
onerror(os.unlink, fullname, sys.exc_info())
File "C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 381, in _rmtree_unsafe
os.unlink(fullname)
PermissionError: [WinError 5] Access is denied: 'THG126.D\\AcqData\\sample_info.xml'
  • 该文件的完整路径是D:\MSD_Data\THG126.D\AcqData\sample_info.xml .
  • 用户帐户名为“admin”,属于“管理员”组。
  • “admin”是所有者,根据 MSD_Data 的“高级安全设置”拥有“完全控制权” , THG126.D , sample_info.xml和 python 脚本。
  • 我还尝试使用“以管理员身份运行”通过 CLI 运行脚本。出现同样的错误。

我查看了文件夹中的所有文件,发现只有sample_info.xml具有 RA 属性,而其他所有属性都只有 A,所以我添加了

path2 = r"D:\\MSD_data\\"+run+r"\\AcqData\\sample_info.xml"
subprocess.check_call(["attrib", "-r", path2, "/S", "/D"])

到脚本,它现在似乎可以工作了。我需要稍等一下其他软件生成新文件夹,看看脚本现在是否正常工作。

最佳答案

问题似乎是文件具有属性“RA”,这意味着“只读”和“已存档”。即使使用的用户帐户 wq 是所有文件和文件夹的所有者,shutil.move() 在复制到目标位置后尝试删除文件时也会失败。

此问题的解决方法是使用

subprocess.check_call(["attrib", "-r", path])

删除只读文件属性。这解决了我的问题。如果您仍然遇到 shutil.move() 问题,您也可以尝试 this solution

关于python - 使用 Python 的 Windows 10 中的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com