From 98615564ed3f6e23b2ae9055d3ddd33e4a058d58 Mon Sep 17 00:00:00 2001 From: alexzorin Date: Fri, 4 Sep 2020 20:57:46 +1000 Subject: [PATCH] log: Don't print backtrace on ^c/KeyboardInterrupt (#8259) --- certbot/certbot/_internal/log.py | 3 +++ certbot/tests/log_test.py | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/certbot/certbot/_internal/log.py b/certbot/certbot/_internal/log.py index 3b87f9bca..3d417c3a5 100644 --- a/certbot/certbot/_internal/log.py +++ b/certbot/certbot/_internal/log.py @@ -319,6 +319,9 @@ def post_arg_parse_except_hook(exc_type, exc_value, trace, debug, log_path): # logger.DEBUG should be used if debug or not issubclass(exc_type, Exception): assert constants.QUIET_LOGGING_LEVEL <= logging.ERROR + if exc_type is KeyboardInterrupt: + logger.error('Exiting due to user request.') + sys.exit(1) logger.error('Exiting abnormally:', exc_info=exc_info) else: logger.debug('Exiting abnormally:', exc_info=exc_info) diff --git a/certbot/tests/log_test.py b/certbot/tests/log_test.py index 5cd287c2e..76764e61b 100644 --- a/certbot/tests/log_test.py +++ b/certbot/tests/log_test.py @@ -306,7 +306,7 @@ class PostArgParseExceptHookTest(unittest.TestCase): self.log_path = 'foo.log' def test_base_exception(self): - exc_type = KeyboardInterrupt + exc_type = BaseException mock_logger, output = self._test_common(exc_type, debug=False) self._assert_exception_logged(mock_logger.error, exc_type) self._assert_logfile_output(output) @@ -342,6 +342,11 @@ class PostArgParseExceptHookTest(unittest.TestCase): self._assert_exception_logged(mock_logger.debug, exc_type) self._assert_quiet_output(mock_logger, output) + def test_keyboardinterrupt(self): + exc_type = KeyboardInterrupt + mock_logger, output = self._test_common(exc_type, debug=False) + mock_logger.error.assert_called_once_with('Exiting due to user request.') + def _test_common(self, error_type, debug): """Returns the mocked logger and stderr output.""" mock_err = six.StringIO()