open () — ошибка времени выполнения Fortran: файл '' не существует, когда exe запускался с Python / Bottle

У меня есть Fortran exe, который переносится на IaaS. Fortan exe работает нормально при запуске из консоли (Windows), но когда я вызываю exe из Bottle RESTserver (локально), пути к файлам не работают, и я получаю следующую ошибку:

At line 79 of file MainCalculator.f90 (unit = 61, file = '└')
Fortran runtime error: File '' does not exist

Вот мой код Python/Bottle для выполнения Fortran:

def model():
    curr_dir = os.path.dirname(os.path.realpath(__file__))
    exe = "Calculator.exe"
    path = os.path.join(curr_dir, 'bin', 'fortan_model', 'Debug', exe)
    a = subprocess.Popen(path, shell=False)
    a.wait()

Вот строка кода, которая выдает ошибку в Fortran:

open(UNIT=61, FILE=trim(adjustl(recipePath))//"Scenarios.txt")

где recipePath = '..\..\ourRecipes\OUR_recipes_082014\' (определено в другом файле .f90)

Кажется, путь к файлу сообщается как значение ASCII (file = '└'), чего не происходит, когда exe запускается из командной строки. Я думал, что это могут быть относительные пути, но выдает ту же ошибку с абсолютными путями, но с file = '≡f*☺└'.

Он также создает имя файла ' Scenarios.txt' (с пробелами впереди).

РЕДАКТИРОВАТЬ: Fortran .exe читает входной текстовый файл. Каждая строка присваивается переменной. Это работает, как и предполагалось, из командной строки, но при выполнении из Bottle анализирует входной файл как пустые символы. Нужно ли предоставлять Python разрешение на чтение файла и/или открытие входного файла в памяти?


person Flash    schedule 28.08.2014    source источник
comment
Попробуйте напечатать содержимое recipePath перед оператором open. Если он содержит что-то странное, попытайтесь выяснить, почему. Обязательно включите все проверки и предупреждения во время выполнения. (-fcheck=all).   -  person Vladimir F    schedule 28.08.2014
comment
Я не могу распечатать инструкции Fortran write(,) в окне консоли Bottle, тогда как я могу распечатать из скрипта Bottle Python. Операторы write(,) отображаются при запуске командной строки, но не при выполнении через скрипт Bottle.   -  person Flash    schedule 28.08.2014
comment
Затем запишите это в файл, или используйте отладчик, или что-то еще.   -  person Vladimir F    schedule 28.08.2014
comment
Путь кажется правильным, поскольку хранится в переменной String. Проблемы возникают из-за проблемы с кодировкой символов   -  person Flash    schedule 28.08.2014


Ответы (1)


У меня была аналогичная проблема.

Я решил эту проблему, уменьшив размер имени выходного файла.

person Denis da Mata    schedule 10.08.2015