如何存储从控制台最后显示的值?

问题描述 投票:1回答:2

我的Python脚本通行证变化的输入到一个所谓的“Dymola的”程序,这反过来进行仿真,以产生输出。这些输出被存储为numpy的数组“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)

有没有办法读出了“停止时间”值(如50)离开控制台Dymola的崩溃后?

python dymola crash
2个回答
1
投票

我假设你正在使用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,这里是一个有用的link。从那里措施:

该Dymola的Python接口排在\ Dymola的2018 \ Modelica的\图书馆\ python_interface几个模块的形式。这些模块的dymola.egg文件中捆绑在一起。

安装:

使用包推荐的方法是将\ Dymola的2018 \ Modelica的\图书馆\ python_interface \ dymola.egg文件附加到您的PYTHONPATH环境变量。您可以从通过设置PYTHONPATH =%PYTHONPATH的Windows命令行这么做%; d:\程序文件(x86)\ Dymola的2018 \ Modelica的\图书馆\ python_interface \ dymola.egg。

如果这不起作用,实例化的界面之前添加以下代码:

import os
import sys
sys.path.insert(0, os.path.join('PATHTODYMOLA',
                                'Modelica',
                                'Library',
                                'python_interface',
                                'dymola.egg'))

2
投票

我假设Dymola的是,你不能改变第三方实体。

一种可能性是使用subprocess模块开始Dymola的,并从你的程序读取它的输出,无论是行由行内运行,或所有创建的进程退出后。您还可以使用Dymola的的退出状态。

如果它是一个Windows-Y事情,没有做流输出,但操纵的窗口界面风格,如果它不产生一个有用的退出状态码,你最好的选择可能是看看文件它创造了同时或之后,它已经走了。 sorted( glob.glob("somepath/*.out"))可能是有用的?

© www.soinside.com 2019 - 2024. All rights reserved.