在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
难道我做错了什么? 有没有更好的方法来检查用户是否有权限访问目录?
在Windows中检查权限可能很复杂(例如,在Vista中用UAC提防问题! – 请参阅此相关问题 )。
你在谈论简单的阅读权限,即阅读目录的内容? 测试权限的最可靠方法是尝试访问目录(例如,执行os.listdir
)并捕获异常。
此外,为了正确解释路径,您必须使用原始字符串或者转义反斜杠('\\'),或者使用正斜杠代替。
(编辑:你可以通过使用os.path.join
完全避免斜线 – 推荐的方式来建立路径)
尽管os.access尽力告诉路径是否可访问,但它并不是完美的。 从Python文档:
注意:即使access()指示它们会成功,I / O操作也可能失败,特别是对于可能具有超出通常的POSIX权限位模型的权限语义的网络文件系统上的操作。
推荐的方法是查看用户是否有权尝试执行此操作,并捕获发生的任何异常。
其实'C:\ haveaccess'不同于r'C:\ haveaccess'。 从Python的角度来看'C:\ haveaccess'不是一个有效的路径,所以使用'C:\\ haveaccess'来代替。 我认为os.access工作得很好。