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

How to store the last displayed value from the console?

我的 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)

在 Dymola 崩溃后,是否有任何方法可以从控制台读出 'stoptime' 值(例如 50)?

我假设 dymola 是您无法更改的第三方实体。

一种可能性是使用 subprocess 模块启动 dymola 并从程序中读取其输出,在运行时逐行读取,或在创建的进程退出后全部读取。您还可以访问 dymola 的退出状态。

如果它是一个 Windows-y 东西,它不进行流输出但操作 window GUI 样式,并且如果它不生成有用的退出状态代码,你最好打赌可能是查看它在消失时或消失后创建的文件。 sorted( glob.glob("somepath/*.out")) 可能有用吗?

我假设您正在使用 dymola 界面来模拟您的模型。如果是这样,为什么不使用 dymola.simulate() 函数的 return 值并检查错误。 例如:

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。 取自那里:

The Dymola Python Interface comes in the form of a few modules at \Dymola 2018\Modelica\Library\python_interface. The modules are bundled within the dymola.egg file.

要安装:

The recommended way to use the package is to append the \Dymola 2018\Modelica\Library\python_interface\dymola.egg file to your PYTHONPATH environment variable. You can do so from the Windows command line via set 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'))