os.access возвращает бесполезное значение для режима os.F_OK в IronPython - PullRequest
1 голос
/ 26 июля 2011

У меня есть куча скриптов Python, которые я пытаюсь использовать в IronPython (мне нужна функциональность C #), и у меня возникают некоторые проблемы с методом os.access.

При использовании метода os.access с режимом, установленным в os.F_OK (посмотрите, можно ли получить доступ к пути), я получаю False каждый раз, даже когда интерпретатор python возвращает True для этого каталога. Странно то, что метод os.access, вызываемый в режимах os.R_OK, os.W_OK и os.X_OK, возвращает 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 выдает исключение (как и ожидалось).

Кроме того, я протестировал метод os.access в интерпретаторе python, который работал нормально.

Кажется, я не могу найти кого-то еще с этой проблемой, поэтому мое первое предположение состоит в том, что я сделал что-то глупое (или пропустил что-то очевидное). Я запускаю код IronPython через Visual Studio 2010, возможно, там что-то мешает.

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

1 голос
/ 26 июля 2011

С одной стороны, os.access может вводить в заблуждение - лучше просто открыть файл и перехватить все возникающие исключения.

IronPython использует os.F_OK для обозначения «существует ли этот файл» и сводит его к вызову File.Exists() - который возвращает false для каталога.

Это ошибка , которая должна быть исправлена ​​в 2.7.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...