diff --git a/pandora/manage.py b/pandora/manage.py index 5c7cebc1c..35dd65050 100755 --- a/pandora/manage.py +++ b/pandora/manage.py @@ -1,7 +1,32 @@ #!/usr/bin/env python import os +import signal import sys +class DelayedSignalHandler(object): + def __init__(self, managed_signals): + self.managed_signals = managed_signals + self.managed_signals_queue = list() + self.old_handlers = dict() + + def _handle_signal(self, caught_signal, frame): + #self.managed_signals_queue.append((caught_signal, frame)) + pass + + def __enter__(self): + for managed_signal in self.managed_signals: + old_handler = signal.signal(managed_signal, self._handle_signal) + self.old_handlers[managed_signal] = old_handler + + def __exit__(self, *_): + for managed_signal, old_handler in self.old_handlers.iteritems(): + signal.signal(managed_signal, old_handler) + ''' + for managed_signal, frame in self.managed_signals_queue: + self.old_handlers[managed_signal](managed_signal, frame) + ''' + + root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__))) os.chdir(root_dir) @@ -10,7 +35,9 @@ python3 = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'python3')) if os.path.exists(python3) and sys.version_info[0] == 2: import subprocess cmd = [python3] + sys.argv - sys.exit(subprocess.call(cmd)) + with DelayedSignalHandler((signal.SIGINT, signal.SIGTERM, signal.SIGHUP)): + exit_value = subprocess.call(cmd) + sys.exit(exit_value) # using virtualenv's activate_this.py to reorder sys.path activate_this = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'activate_this.py'))