“createApplication”在脚本退出时有意清理,但有两种方法可以绕过它。
最简单的方法是在脚本末尾添加一个 while 循环。只要脚本正在运行,这将使波形保持运行,您可以在运行脚本的终端中通过 Ctrl-C 停止它。根据您的原始脚本,它看起来像:
#! /usr/local/bin/python
import time
from ossie.utils import redhawk
#Start a new domain and device managers
domain = redhawk.kickDomain()
time.sleep(1)
wave = domain.createApplication("/waveforms/Test/Test.sad.xml")
wave.start()
while True:
time.sleep(1)
除了测试之外,不建议这样做。除了在脚本结束时关闭波形之外,上述代码还停止域和设备管理器。对于在启动时启动波形的系统,域和设备管理器通常通过 /etc/init.d 脚本启动,如下所示:
nodeBooter -D --daemon
nodeBooter -d /nodes/DevMgr_[hostname]/DeviceManager.dcd.xml --daemon
然后在您的脚本中,您将执行以下操作:
from ossie.utils import redhawk
from ossie.cf import CF
domain = redhawk.Domain('REDHAWK_DEV')
try:
domain.installApplication("/waveforms/Test/Test.sad.xml")
except CF.DomainManager.ApplicationAlreadyInstalled:
print "Already Installed, skipping."
factories = domain._get_applicationFactories()
#if multiple applications are installed you can look for the correct factory
# using factories[i]._get_name() == 'Test'
myFactory = factories[0]
myFactory.create('Test_[UNIQUEID]', [], [])