Python - 测试目录权限

时间:2009-02-11 22:26:47

标签: python windows permissions directory

在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

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

3 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:5)

虽然os.access尽力告诉路径是否可访问,但它并不是完美的。来自Python文档:

  

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

建议的方法来确定用户是否有权做任何尝试,并捕获发生的任何异常。

答案 2 :(得分:0)

实际上'C:\ hasaccess'与r'C:\ haveaccess'不同。 从Python的角度来看,'C:\ hasaccess'不是一个有效的路径,所以请改用'C:\\ haveaccess'。 我认为os.access工作正常。