os.access 在 IronPython 中对模式 os.F_OK 返回无用值
我有一堆Python脚本,想在IronPython中使用(因为我需要C#的功能),但是在使用os.access方法时遇到了一些问题。
当我用os.access方法检查一个路径是否可以访问时,设置的模式是os.F_OK(就是看看这个路径能不能被访问),结果每次都返回False,即使在Python解释器中检查这个目录时返回的是True。不过奇怪的是,当我用os.R_OK、os.W_OK和os.X_OK这些模式调用os.access时,结果却是True。
这里有一段我写的代码来演示这个问题:
import os
d = ["C:\\", ".\\", "./", ".", "C:\\BOGUS_DIR"]
for path in d:
print path
try:
print "access: %s"%os.access(path, os.F_OK)
print "read: %s"%os.access(path, os.R_OK)
print "write: %s"%os.access(path, os.W_OK)
print "execute: %s"%os.access(path, os.X_OK)
print "-------------------------"
except Exception, e:
print e
print "finished"
raw_input("")
结果是:
C:\
access: False
read: True
write: True
execute: True
-------------------------
.\
access: False
read: True
write: True
execute: True
-------------------------
./
access: False
read: True
write: True
execute: True
-------------------------
.
access: False
read: True
write: True
execute: True
-------------------------
C:\BOGUS_DIR
access: False
[Errno 2] Could not find file 'C:\BOGUS_DIR'.
finished
为了验证,我还在列表中加了一个虚假的目录(一个不存在的目录)。用os.access检查这个虚假目录时,模式os.F_OK返回了False(就像之前一样),但是用os.R_OK检查时却抛出了一个异常(这也是预期的结果)。
另外,我在Python解释器中测试了os.access方法,结果是正常的。
我似乎找不到其他人有这个问题,所以我第一反应是我可能做了什么傻事(或者漏掉了什么明显的东西)。我是在Visual Studio 2010中运行IronPython代码的,或许那里有些东西在干扰。
如果能得到帮助,我将非常感激。谢谢!
1 个回答
1
首先,os.access 这个函数可能会让人误解——其实直接打开文件并处理可能出现的错误更靠谱。
IronPython 使用 os.F_OK 来表示“这个文件存在吗”,实际上它是调用 File.Exists()
这个方法——不过对于文件夹来说,这个方法会返回 false。
这是一个bug,应该在 2.7.1 版本中修复。