我的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的崩溃后?
我假设你正在使用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'))
我假设Dymola的是,你不能改变第三方实体。
一种可能性是使用subprocess
模块开始Dymola的,并从你的程序读取它的输出,无论是行由行内运行,或所有创建的进程退出后。您还可以使用Dymola的的退出状态。
如果它是一个Windows-Y事情,没有做流输出,但操纵的窗口界面风格,如果它不产生一个有用的退出状态码,你最好的选择可能是看看文件它创造了同时或之后,它已经走了。 sorted( glob.glob("somepath/*.out"))
可能是有用的?