如何存储控制台最后显示的值?
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'))
我的 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'))