【发布时间】: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 状态代码也可能有效。否则,您所拥有的只是极其模糊的 CEACCES(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