「createApplication」は、スクリプトの終了時に意図的にクリーンアップしますが、これを回避するには 2 つの方法があります。
最も簡単な方法は、スクリプトの最後に 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]', [], [])