Python – testing目录权限

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工作得很好。