开发者

os.access returning useless value for mode os.F_OK in IronPython

I have a pile of python scripts that I am trying to use within IronPython (I need C# functionality), and I am having some issues with the os.access method.

When using the os.access method with the mode set to os.F_OK (see whether a path can be accessed), I am getting False returned every time, even when the python interpreter returns True for that directory. The strange thing about this though, is that the os.access method called with the os.R_OK, os.W_OK and os.X_OK modes returns True.

Here is a code sample I knocked up to demonstrate the issue:

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("")

The results:

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

For good measure, I added a bogus directory to the list (a directory that doesn't exist). The os.access with mode os.F_OK returned False (as always), but the call to check os.R_OK throws an exception (as expected).

Also, I tested the os.access method in the python interpreter, which worked fine.

I can't seem to find anybody else with this issue, which is why my first assumption is that I've done something silly (or missed something obvious). I am running the IronPython code through Visual Studio 2010, perhaps there is something interfering there.

Any help would be greatly appreciated. Thanks


For one, os.access can be misleading - it's better to just open the file and catch any exceptions that occur.

IronPython uses os.F_OK to mean "does this file exist", and boils it down to a call to File.Exists() - which returns false for a directory.

This is a bug, and should be fixed in 2.7.1.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜