【问题标题】:Python script doesn't have permission to change filePython 脚本无权更改文件
【发布时间】:2019-01-11 13:30:05
【问题描述】:

在 Windows 上运行我的 Python 加密程序时,一些文件返回一个

File "C:\Users\admin\Desktop\test.py", line 71, in encrypt_file
with open(out_filename, 'wb') as outfile:

PermissionError: [Errno 13] Permission denied:

有没有办法让 Python 程序获得许可?我已经尝试过以管理员身份运行我的程序,以及来自该网站的一些特权提升 sn-ps。

代码如下:

with open(in_filename, 'rb') as infile:
        with open(out_filename, 'wb') as outfile:
            outfile.write(struct.pack('<Q', filesize))
            outfile.write(iv)

【问题讨论】:

  • 我不确定您的文件系统的确切权限是什么,但请记住,如果您打开文件(以 excel 或其他方式)查看它,该文件通常会被锁定而python无法写入它
  • 如果存在阻止写入的排他字节范围锁,当您实际write 并刷新到操作系统时,您将收到锁冲突错误。如果它是共享违规错误(文件访问共享与 Windows 中的文件锁定不同),那么在限制写入访问的引用关闭之前,您将无法打开文件进行写入。特别是,请求读取/执行、写入/附加或删除访问权限的打开必须共享访问权限。 Python 使用读写共享,但不使用删除共享。
  • 不幸的是,由于 Python 直接调用 C 运行时 _wopen 函数而不是 CreateFile,因此无法保证 GetLastError() 有效,这就是此异常中不存在 WinError 代码的原因。如果通过 ctypes 访问它可能仍然有效,RtlGetLastNtStatus() 中的 NT 状态代码也可能有效。否则,您所拥有的只是极其模糊的 C EACCES (13) 错误,其中包含大约一百万个错误和状态代码(夸张,但确实很多)。
  • 我遇到的文件是“C:\\Program Files\\Common Files\\microsoft shared\\ink\\Alphabet.xml.enc”和“C:\\users\\ admin\\AppData\\Local\\Comms\\UnistoreDB\\store.jfm" 我敢肯定还有一千多个。
  • 使用Process Explorer 搜索打开的句柄。

标签: python windows python-3.x permissions


【解决方案1】:

我相信您正在尝试以写入权限打开文件,因此您需要使用'w'

with open(out_filename, 'w') as outfile:

您可以使用特定的参数进行不同的访问,

'w' - Open to write 
'r' -Open to read 
'a' - Open to append at the end of the file.

【讨论】:

  • 我将代码添加到我的原始帖子中,我需要使用'wb'以字节为单位写入。
猜你喜欢
  • 2013-09-17
  • 2017-10-23
  • 2019-01-11
  • 2023-03-08
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 2013-04-21
  • 2011-11-05
相关资源
最近更新 更多