我有一堆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.F_OK的os.access返回False(一如既往),但是检查os.R_OK的调用会抛出异常(如预期的那样)。
另外,我在python解释器中测试了os.access方法,该方法工作正常。
我似乎无法找到这个问题的任何人,这就是为什么我的第一个假设是我做了一些愚蠢的事情(或错过了一些明显的事情)。我正在通过Visual Studio 2010运行IronPython代码,可能会有一些干扰。
非常感谢任何帮助。感谢
答案 0 :(得分:1)
首先,os.access可能会产生误导 - 最好只打开文件并捕获发生的任何异常。
IronPython使用os.F_OK来表示“此文件是否存在”,并将其归结为对File.Exists()
的调用 - 对于目录返回false。
This is a bug,应该在2.7.1中修复。