From 078f36d86a939b479a8f670d761c0fc22930c5ce Mon Sep 17 00:00:00 2001 From: Edgar Boda-Majer Date: Sun, 20 Nov 2016 16:40:04 +0100 Subject: [PATCH] handle SIGINT with a quit prompt (#1760) --- mitmproxy/tools/console/master.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py index 3db6f4257..f8850404a 100644 --- a/mitmproxy/tools/console/master.py +++ b/mitmproxy/tools/console/master.py @@ -3,6 +3,7 @@ import mimetypes import os import os.path import shlex +import signal import stat import subprocess import sys @@ -91,6 +92,11 @@ class ConsoleMaster(master.Master): self.addons.add(*addons.default_addons()) self.addons.add(intercept.Intercept(), self.view) + def sigint_handler(*args, **kwargs): + self.prompt_for_exit() + + signal.signal(signal.SIGINT, sigint_handler) + def __setattr__(self, name, value): self.__dict__[name] = value signals.update_settings.send(self) @@ -101,6 +107,17 @@ class ConsoleMaster(master.Master): expire=1 ) + def prompt_for_exit(self): + signals.status_prompt_onekey.send( + self, + prompt = "Quit", + keys = ( + ("yes", "y"), + ("no", "n"), + ), + callback = self.quit, + ) + def sig_add_log(self, sender, e, level): if self.options.verbosity < log.log_tier(level): return @@ -139,15 +156,7 @@ class ConsoleMaster(master.Master): self.view_stack.pop() self.loop.widget = self.view_stack[-1] else: - signals.status_prompt_onekey.send( - self, - prompt = "Quit", - keys = ( - ("yes", "y"), - ("no", "n"), - ), - callback = self.quit, - ) + self.prompt_for_exit() def sig_push_view_state(self, sender, window): """