2009-02-11 72 views
7

在Windows上的Python中,有没有一种方法可以确定用户是否有权访问目录?我看了一下os.access,但它给出了错误的结果。Python - 测试目录权限

>>> 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 

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

+1

第一次和第三次访问失败,因为\ h被解释为一个(无效)转义序列 – 2009-02-11 22:34:31

回答

7

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

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

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

(编辑:您完全可以通过使用os.path.join避免斜杠 - 推荐的方式来建立路径)

+0

好的答案,但在最后一点,使用os.path.join或os.path.sep比创建手动路径。 – 2009-02-11 23:02:32

+0

完美适用于我的目的。谢谢! – Sean 2009-02-11 23:17:55

5

虽然os.access会尽可能告诉我们,如果一个路径访问或没有,它不要求要完美。从Python文档:

注:I /当进入()表示,他们 会成功,特别是在网络文件系统 操作 可能有权限语义 超出了通常的POSIX O操作可能会失败,甚至 许可位 模型。

推荐的方法是找出用户是否有权做任何事情来尝试去做,并捕获发生的任何异常。

0

实际上'C:\ haveaccess'不同于r'C:\ haveaccess'。 从Python的角度来看'C:\ haveaccess'不是一个有效的路径,所以使用'C:\\ haveaccess'来代替。 我认为os.access工作得很好。