fprime/Ref/scripts/run_ref_gds.py
2019-03-19 22:30:53 -07:00

120 lines
3.7 KiB
Python

#!python
import sys
import subprocess
import os
import time
import signal
from optparse import OptionParser
#TODO remove, debugging
from pprint import pprint
def main(argv=None):
# Get a path to the python binary we are using to launch processes
python_bin = "python"
# Get a path to the root of the reference application build directory
build_root = os.environ["BUILD_ROOT"]
# Parse options on the command line
parser = OptionParser()
parser.add_option("-p", "--port", dest="port", action="store", type="int", help="Set the threaded TCP socket server port [default: 50000]", default=50000)
parser.add_option("-a", "--addr", dest="addr", action="store", type="string", help="set the threaded TCP socket server address [default: %default]", default="0.0.0.0")
parser.add_option("-n", "--nobin", dest="nobin", action="store_true", help="Disables the binary app from starting [default: %default]", default=False)
parser.add_option("-t", "--twin", dest="twin", action="store_true", help="Runs Threaed TCP Server in window, otherwise backgrounds [default: %default]", default=False)
(opts, args) = parser.parse_args(argv)
used_port = opts.port
nobin = opts.nobin
addr = opts.addr
twin = opts.twin
################## Run the ThreadedTCPServer.py #################################
if twin:
TTS_args = [python_bin,"%s/Gds/wxGui/bin/pexpect_runner.py"%build_root,
"ThreadedTCP.log","Threaded TCP Server",
python_bin,"%s/Gds/bin/ThreadedTCPServer.py"%build_root,
"--port","%d"%used_port, "--host",addr]
TTS = subprocess.Popen(TTS_args)
else:
tts_log = open("ThreadedTCP.log",'w')
TTS_args = [python_bin, "-u",
"%s/Gds/bin/ThreadedTCPServer.py"%build_root,
"--port","%d"%used_port, "--host",addr]
TTS = subprocess.Popen(TTS_args,stdout=tts_log,stderr=subprocess.STDOUT)
#################################################################################
# Wait for TCP Server to start
time.sleep(2)
########################### Run the GUI for the GDS #############################
GUI_args = [python_bin,"%s/Gds/wxGui/bin/gds.py"%build_root,
"--port","%d"%used_port,
"--xml-dict","%s/Ref/Top/RefTopologyAppDictionary.xml"%build_root,
"--addr",addr,"-L","%s/Ref/logs"%build_root,
"--config","%s/Ref/gds.ini"%build_root]
#print ("GUI: %s"%" ".join(GUI_args))
GUI = subprocess.Popen(GUI_args)
#################################################################################
################################ Run Ref app ####################################
ref_bin = "%s/Ref/%s/Ref"%(build_root,os.environ["OUTPUT_DIR"])
if not nobin:
#print("running ref app\n\n\n\n")
REF_args = [python_bin,"%s/Gds/wxGui/bin/pexpect_runner.py"%build_root,
"Ref.log","Ref Application",ref_bin,"-p","%d"%used_port,
"-a",addr]
REF = subprocess.Popen(REF_args)
#################################################################################
# Wait for GUI process to close
#print("Waiting for GUI")
GUI.wait()
#print("GUI Closed")
if not nobin:
#print("Waiting for App")
try:
REF.send_signal(signal.SIGTERM)
except:
pass
try:
REF.wait()
except:
pass
#print("App Closed")
#print("Waiting for TTS")
try:
TTS.send_signal(signal.SIGINT)
except:
pass
try:
TTS.wait()
except:
pass
#print("TTS Closed")
if __name__ == "__main__":
sys.exit(main())