【问题标题】:os.access returns True, but file is not writableos.access 返回 True,但文件不可写
【发布时间】:2021-05-08 04:22:23
【问题描述】:

我有这个代码:

import os

print(os.access("tst.txt", os.R_OK))
open("tst.txt", "rb")

# File Permissions:
# Owner: Trusted Installer
# Administrators and my user: deny all permissions

os.access 返回 True 但打开文件会引发 PermissionError 异常。

如果我在另一个文件(如 cmd.exe、notepad.exe、System32 目录本身或任何其他文件)上尝试此操作,它总是返回 True。

如果文件不存在,则返回 False。

SO:True 在任何现有文件上。即使没有写访问权限。

我在 Internet 上找不到任何关于此的内容。

有人知道为什么会出现这个问题吗?

编辑: 当然我的脚本不是以管理员身份运行的。

不管我是测试读还是写访问。

【问题讨论】:

  • 根据documentation for os.access:“注意:I/O 操作可能会失败,即使 access() 指示它们会成功,特别是对于可能具有超出通常 POSIX 权限的权限语义的网络文件系统上的操作位模型。”
  • 您正在检查写入权限,但正在打开读取权限。对吗?
  • 不,我不能读写,我没有权限,但是 os.access 返回 True,
  • 不管我是测试读还是写访问
  • 是的,我阅读了文档。这不是网络文件,它对我计算机上的任何文件都返回 True,我递归地对其进行了测试。

标签: python file-permissions


【解决方案1】:

看起来os.access 不检查 Windows 上的用户权限,它只检查是否设置了只读标志。

请注意,os.access 不会检查 Windows 上的文件安全性。 W_OK 只检查只读标志。因此,如果您使用的是 Windows 并且没有使用 Windows 安全 API,那么使用 try...except 确实是唯一的可能性。

来自http://net-informations.com/python/file/exists.htm

在这种情况下,您可能需要尝试包装...除了您的代码

【讨论】:

  • 谢谢你,这就是我搜索的内容
  • 我也学到了一些新东西。我一直在 python 中使用整体更容易请求宽恕的模型
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 2016-02-22
  • 2016-04-18
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多