在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
我做错了吗?有没有更好的方法来检查用户是否有权访问目录?
答案 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工作正常。