From 9fe9b768ed50b3f8bf7d51328876128e7d931712 Mon Sep 17 00:00:00 2001 From: Ken Bannister Date: Wed, 1 Oct 2014 06:27:22 -0400 Subject: [PATCH 1/3] SW-167. Fix; update SCons to wait on OpenVisualizer web subprocess. * Allows the user to gracefully terminate from the console. --- .../openvisualizer/bin/openVisualizerApp/SConscript | 10 ++++++++-- .../bin/openVisualizerApp/openVisualizerWeb.py | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/software/openvisualizer/bin/openVisualizerApp/SConscript b/software/openvisualizer/bin/openVisualizerApp/SConscript index a0af5dda6..bdef690b2 100644 --- a/software/openvisualizer/bin/openVisualizerApp/SConscript +++ b/software/openvisualizer/bin/openVisualizerApp/SConscript @@ -11,6 +11,7 @@ Provides rungui, runcli, and runweb targets. import os import subprocess import sconsUtils +import signal Import('env') @@ -67,6 +68,10 @@ def uiRunner(target, source, env): # Must wait for CLI program that uses raw_input(); otherwise # SCons exits and standard input is sent to shell. result = p.wait() + if (result == -signal.SIGTERM): + # Likely from console; not an error + print 'Terminated by SIGTERM' + result = 0 else: # Display PID to make it easier to kill if necessary. print 'Child PID is {0}'.format(p.pid) @@ -156,6 +161,7 @@ cliEnv['HOSTOPT'] = None cliEnv['PORTOPT'] = None Alias('runcli', setupUiRunner(cliEnv, 'openVisualizerCli.py', [])) -webEnv = env.Clone() -webdirs = ['web_files'] +webEnv = env.Clone() +webdirs = ['web_files'] +webEnv['WAIT_ON_UI'] = True Alias('runweb', setupUiRunner(webEnv, 'openVisualizerWeb.py', webdirs)) diff --git a/software/openvisualizer/bin/openVisualizerApp/openVisualizerWeb.py b/software/openvisualizer/bin/openVisualizerApp/openVisualizerWeb.py index cbcd2df58..3cd672112 100644 --- a/software/openvisualizer/bin/openVisualizerApp/openVisualizerWeb.py +++ b/software/openvisualizer/bin/openVisualizerApp/openVisualizerWeb.py @@ -402,4 +402,5 @@ def _addParserArgs(parser): input = raw_input('> ') if input=='q': print 'bye bye.' + app.close() os.kill(os.getpid(), signal.SIGTERM) \ No newline at end of file From 41c72eda737bd8725b7017718b3ad740f7ab0f8e Mon Sep 17 00:00:00 2001 From: Ken Bannister Date: Wed, 1 Oct 2014 22:08:12 -0400 Subject: [PATCH 2/3] SW-167. Handle OS dependent value for signal in subprocess result code. --- software/openvisualizer/bin/openVisualizerApp/SConscript | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/software/openvisualizer/bin/openVisualizerApp/SConscript b/software/openvisualizer/bin/openVisualizerApp/SConscript index bdef690b2..e966d6650 100644 --- a/software/openvisualizer/bin/openVisualizerApp/SConscript +++ b/software/openvisualizer/bin/openVisualizerApp/SConscript @@ -65,10 +65,12 @@ def uiRunner(target, source, env): p = subprocess.Popen(argList, env=subEnv) if env['WAIT_ON_UI']: - # Must wait for CLI program that uses raw_input(); otherwise + # Must wait for a program that uses raw_input(); otherwise # SCons exits and standard input is sent to shell. result = p.wait() - if (result == -signal.SIGTERM): + + if (os.name == 'posix' and result == -signal.SIGTERM) \ + or (os.name != 'posix' and result == signal.SIGTERM): # Likely from console; not an error print 'Terminated by SIGTERM' result = 0 From 7b4816082018254b13cd22ad82421b1d0b9e394b Mon Sep 17 00:00:00 2001 From: Ken Bannister Date: Wed, 1 Oct 2014 22:29:04 -0400 Subject: [PATCH 3/3] SW-167. Remove unnecessary console print statement. --- software/openvisualizer/bin/openVisualizerApp/SConscript | 1 - 1 file changed, 1 deletion(-) diff --git a/software/openvisualizer/bin/openVisualizerApp/SConscript b/software/openvisualizer/bin/openVisualizerApp/SConscript index e966d6650..f6ac608b8 100644 --- a/software/openvisualizer/bin/openVisualizerApp/SConscript +++ b/software/openvisualizer/bin/openVisualizerApp/SConscript @@ -72,7 +72,6 @@ def uiRunner(target, source, env): if (os.name == 'posix' and result == -signal.SIGTERM) \ or (os.name != 'posix' and result == signal.SIGTERM): # Likely from console; not an error - print 'Terminated by SIGTERM' result = 0 else: # Display PID to make it easier to kill if necessary.