forked from 0x2620/pandora
ignore ctrl-c in py2 wrapper
This commit is contained in:
parent
8bd4cd6305
commit
d641ea80a8
1 changed files with 28 additions and 1 deletions
|
@ -1,7 +1,32 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import os
|
import os
|
||||||
|
import signal
|
||||||
import sys
|
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__)))
|
root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
|
||||||
os.chdir(root_dir)
|
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:
|
if os.path.exists(python3) and sys.version_info[0] == 2:
|
||||||
import subprocess
|
import subprocess
|
||||||
cmd = [python3] + sys.argv
|
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
|
# using virtualenv's activate_this.py to reorder sys.path
|
||||||
activate_this = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'activate_this.py'))
|
activate_this = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'activate_this.py'))
|
||||||
|
|
Loading…
Reference in a new issue