Путь к смонтированному диску с использованием скрипта Python, работающего на tomcat

У меня есть следующий скрипт Python, который вызывается через класс Java. Он отлично работает с локальными именами файлов ('D:\temp\Test.pdf'), но когда имя файла \serverA\f$\dir\Test.pdf, всегда возвращает false. Он работает на сервере tomcat (с правами администратора), а диск serverA f смонтирован на сервере tomcat. Любые идеи о том, что мне может не хватать?

def checkFileExists(filename):

        vFile = File(filename)
        if (vFile == None):
            return False
        return vFile.exists()

person user2119684    schedule 28.02.2013    source источник
comment
Если файл находится на сетевом диске, проблема немного глубже, чем может показаться. См. stackoverflow.com/questions/1271317/. Также в будущем обратите внимание на стандартную функцию os.path.exists.   -  person Zaur Nasibov    schedule 28.02.2013
comment
Спасибо за это, но я не могу позволить себе сопоставлять и удалять диски самостоятельно в этой системе. К сожалению, диск, на котором находятся файлы, отображается на сервере tomcat. Итак, вы говорите, что для этого нет стандартного решения?   -  person user2119684    schedule 28.02.2013
comment
Кстати, это путь \serverA\...? или это \\serverA\...?   -  person Zaur Nasibov    schedule 28.02.2013
comment
Это \\ServerA\f$, так что это подключенный диск (f:) на удаленной машине (serverA).   -  person user2119684    schedule 28.02.2013
comment
Не могли бы вы запустить еще один тест с помощью командной строки: IF EXIST \\serverA\$f\dir\Test.pdf ECHO '1'? Идея состоит в том, чтобы запустить внутренний инструмент Windows из Python и проанализировать его вывод :)   -  person Zaur Nasibov    schedule 28.02.2013
comment
Он возвращает «1», так что он есть. Я не совсем понял вашу мысль, можно поконкретнее? Большое спасибо   -  person user2119684    schedule 28.02.2013
comment
Смотрите обновленный ответ. Я надеюсь, что это работает :)   -  person Zaur Nasibov    schedule 28.02.2013


Ответы (1)


Итак, как обсуждалось в комментариях к вопросу, получить доступ к общим ресурсам Windows в Python немного сложно. Таким образом, хакерский способ проверить, существует ли файл в удаленном месте, не понятом Python, но понятным инструментам Windows, будет вызывать эти инструменты и анализировать их вывод.

Например:

import subprocess

def file_exists(path):        
    res = subprocess.check_output(['IF', 'EXIST', path, 'ECHO', "1"])
    return res.strip() == '1'

Применение:

path = r'\\serverA\f$\dir\Test.pdf'
print(file_exists(path))
person Zaur Nasibov    schedule 28.02.2013
comment
Спасибо за это, это действительно работает для обмана python и проверки того, действительно ли файл существует, но все же я не получаю сам файл. Смысл всей операции состоит в том, чтобы переместить некоторые файлы из удаленного места на локальный диск . Таким образом, реальная проблема здесь заключается в том, что после vFile=File(pathname) vFile равно None, а vFile.exists() возвращает false. У вас есть идеи, почему это может произойти? Спасибо еще раз - person user2119684; 28.02.2013
comment
Просто используйте команду xcopy аналогичным образом, например. subprocess.call(['xcopy', source_path, dest_path]) - person Zaur Nasibov; 28.02.2013