os.access在IronPython中为模式os.F_OK返回无用值

时间:2011-07-25 23:46:05

标签: c# python windows file ironpython

我有一堆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代码,可能会有一些干扰。

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:1)

首先,os.access可能会产生误导 - 最好只打开文件并捕获发生的任何异常。

IronPython使用os.F_OK来表示“此文件是否存在”,并将其归结为对File.Exists()的调用 - 对于目录返回false。

This is a bug,应该在2.7.1中修复。