2015-04-09 3 views
4

Привет, у меня есть приложение, которое иногда сообщает, что файл не существует, даже когда он это делает, я использую os.path.exists, и файл находится в смонтированной сети доля. Я на OSX Yosemite, python 2.7.9, и у меня есть права доступа к файлу. Вот что странно. Первая команда ниже сообщает False. Затем я запустил ее, но изменил один из символов в имени файла на нижний регистр (TestVendorid_VerifyLog.txt), запустил его снова, и он сообщает True! Затем снова запустите его с верхним регистром (TestVendorId_VerifyLog.txt), и он сообщает True! Что происходит? Это вполне согласуется с тем, что он возвращает True большую часть времени, но затем внезапно возвращается False, после чего я могу повторить упражнение ниже.python os.path.exists сообщает False, когда файлы есть

>>> import os 
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt") 
False 
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorid_VerifyLog.txt") 
True 
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt") 
True 
>>> 

UPDATE 1:

Когда докладывает True, я побежал это:

>>> os.stat("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt") 
posix.stat_result(st_mode=33216, st_ino=5351561660274954203, st_dev=771751953L, st_nlink=1, st_uid=504, st_gid=20, st_size=38552, st_atime=1428492003, st_mtime=1428589374, st_ctime=1428589374) 

UPDATE 2:

ОК, теперь я могу повторить это, и это, безусловно, кэш вещь. Я удаляю файл TestVendorId_VerifyLog.txt на своем локальном Mac, а затем воссоздаю файл на другой рабочей станции (этот файл находится в сетевом ресурсе). Затем я получаю False на своем Mac. Если я изменю букву в имени файла команды os.path.exists, похоже, что os.path.exists более внимательно ищут файл и находит его. Так что мне нужна команда «Обновить Finder» в python перед запуском команды.

+0

Вы работаете в файловой системе, чувствительной к регистру? Другой случай - это другой файл. Linux чувствителен к регистру. –

+0

Но, 2-й и 3-й os.path.exists оба проходят True! – speedyrazor

+0

Какой файл действительно находится в вашей файловой системе? Он чувствителен к регистру? Я согласен с тем, что проблема в любом случае, но мы все же хотим знать, чтобы помочь понять проблему. –

ответ

1

os.path.exists возвращает False, когда OSError происходит, пока он пытается ставить файл. Исключение обрабатывается и замаскировано.

Вы должны попытаться запустить os.stat(filename), чтобы узнать, дает ли это дополнительную информацию о проблеме.

+0

Я обновил вопрос с результатами os.stat. – speedyrazor

0

Удостоверьтесь, что в любом месте вашего файла нет ни одного \n или любого другого «невидимого» символа.

Редактировать: После нескольких часов работы по аналогичной проблеме, я понял, что проблема была неправильной для каталога, в котором находился мой целевой файл. Убедитесь, что вы используете ls -l в своем каталоге, чтобы проверить, использование имеет надлежащее разрешение.