У меня есть куча скриптов 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, возможно, там что-то мешает.
Любая помощь будет принята с благодарностью. Спасибо