【问题标题】:Test directory permissions in Python?在 Python 中测试目录权限?
【发布时间】:2010-10-07 01:13:06
【问题描述】:

在 Windows 上的 Python 中,有没有办法确定用户是否有权访问目录?我查看了os.access,但它给出了错误的结果。

>>> os.access('C:\haveaccess', os.R_OK)
False
>>> os.access(r'C:\haveaccess', os.R_OK)
True
>>> os.access('C:\donthaveaccess', os.R_OK)
False
>>> os.access(r'C:\donthaveaccess', os.R_OK)
True

我做错了吗?有没有更好的方法来检查用户是否有权访问目录?

【问题讨论】:

  • 第一次和第三次访问失败,因为 \h 被解释为(无效)转义序列

标签: python windows permissions directory


【解决方案1】:

在 Windows 中检查权限可能很复杂(例如,请注意带有 UAC 的 Vista 中的问题!- 参见related question)。

您是在谈论简单的读取访问,即读取目录的内容吗? 测试权限的最可靠方法是尝试访问目录(例如,执行os.listdir)并捕获异常。

此外,为了正确解释路径,您必须使用原始字符串或转义反斜杠 ('\\'),- 或改用正斜杠。

(编辑:您可以使用 os.path.join 完全避免使用斜线——推荐的构建路径的方法)

【讨论】:

  • 很好的答案,但最后一点,使用 os.path.join 或 os.path.sep 比手动创建路径要好。
  • 非常适合我的目的。谢谢!
  • 很高兴看到我自己与权限的斗争没有被遗忘:-)
【解决方案2】:

虽然 os.access 尽最大努力判断路径是否可访问,但它并不声称是完美的。来自 Python 文档:

注意:I/O 操作甚至可能失败 当 access() 表明他们 会成功,特别是对于 对网络文件系统的操作 可能具有权限语义 超出通常的 POSIX 权限位 型号。

确定用户是否有权执行任何尝试执行的操作并捕获发生的任何异常的推荐方法。

【讨论】:

    【解决方案3】:

    实际上 'C:\haveaccess' 与 r'C:\haveaccess' 不同。 从 Python 的角度来看,“C:\haveaccess”不是有效路径,因此请改用“C:\\haveaccess”。 我认为 os.access 工作得很好。

    【讨论】:

    • 'C:\haveaccess' 一条有效路径,因为\h 没有任何特殊意义,所以它有效(纯属运气,但有效)
    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2022-12-20
    • 2023-03-21
    • 2012-01-18
    相关资源
    最近更新 更多