Как сохранить последнее отображаемое значение из консоли? - PullRequest
0 голосов
/ 18 декабря 2018

Мой скрипт на python передает изменяемые входные данные в программу под названием «Dymola», которая, в свою очередь, выполняет симуляцию для генерации выходных данных.Эти выходные данные хранятся в виде пустых массивов "out1.npy".

for i in range(0,100):
    #code to initiate simulation
    print(startValues, 'ParameterSet:', ParameterSet,'time:', stoptime)
    np.save('out1.npy', output_data)

К сожалению, Dymola очень часто аварийно завершает работу, что делает необходимым перезапуск цикла с момента, отображаемого в консоли, когда он произошел сбой (например, 50), и увеличение количества выходных файлов на 1В противном случае данные из первого набора будут перезаписаны.

for i in range(50,100):
    #code to initiate simulation
    print(startValues, 'ParameterSet:', ParameterSet,'time:', stoptime)
    np.save('out2.npy', output_data)

Есть ли какой-либо способ считывания значения 'stoptime' (например, 50) из консоли после сбоя Dymola?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я предполагаю, что вы используете интерфейс dymola для моделирования вашей модели.Если это так, почему бы вам не использовать возвращаемое значение функции dymola.simulate () и проверять наличие ошибок.Например:

crash_counter = 1
from dymola.dymola_interface import DymolaInterface
dymola = DymolaInterface()
for i in range(0,100):
    res = dymola.simulate("myModel")
    if not res:
        crash_counter += 1
    print(startValues, 'ParameterSet:', ParameterSet,'time:', stoptime)
    np.save('out%d.npy'%crash_counter, output_data)

Поскольку иногда бывает трудно установить DymolaInterface на ваш компьютер, вот полезная ссылка .Взято оттуда:

Интерфейс Python Dymola поставляется в виде нескольких модулей в \ Dymola 2018 \ Modelica \ Library \ python_interface.Модули связаны в файле dymola.egg.

Для установки:

Рекомендуемый способ использования пакета - добавить \ Dymola 2018 \ Modelica \ Library\ python_interface \ dymola.egg в вашу переменную окружения PYTHONPATH.Это можно сделать из командной строки Windows с помощью команды PYTHONPATH =% PYTHONPATH%; D: \ Program Files (x86) \ Dymola 2018 \ Modelica \ Library \ python_interface \ dymola.egg.

Если этоне работает, добавьте следующий код перед созданием интерфейса:

import os
import sys
sys.path.insert(0, os.path.join('PATHTODYMOLA',
                                'Modelica',
                                'Library',
                                'python_interface',
                                'dymola.egg'))
0 голосов
/ 18 декабря 2018

Я предполагаю, что dymola - это сторонняя сущность, которую вы не можете изменить.

Одна из возможностей - использовать модуль subprocess для запуска dymola и чтения его выходных данных из вашей программы, либо построчно-линии, как он работает, или все после завершения созданного процесса.У вас также есть доступ к состоянию выхода dymola.

Если это Windows-y, которая не выполняет потоковый вывод, но манипулирует стилем GUI окна, и если она не генерирует полезный код состояния выхода,Лучше всего было бы посмотреть, какие файлы он создал во время или после того, как он ушел.sorted( glob.glob("somepath/*.out")) может быть полезно?

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