diff --git a/keystoneclient/shell.py b/keystoneclient/shell.py index be7330ce0..16e3a2c91 100644 --- a/keystoneclient/shell.py +++ b/keystoneclient/shell.py @@ -461,7 +461,9 @@ class OpenStackHelpFormatter(argparse.HelpFormatter): def main(): try: OpenStackIdentityShell().main(sys.argv[1:]) - + except KeyboardInterrupt: + print("... terminating keystone client", file=sys.stderr) + sys.exit(130) except Exception as e: print(encodeutils.safe_encode(six.text_type(e)), file=sys.stderr) sys.exit(1) diff --git a/keystoneclient/tests/test_shell.py b/keystoneclient/tests/test_shell.py index 65cba9dbd..842aa4e67 100644 --- a/keystoneclient/tests/test_shell.py +++ b/keystoneclient/tests/test_shell.py @@ -520,3 +520,13 @@ class ShellTest(utils.TestCase): 'http://example.com:4321/go', 'http://example.com:9876/adm') self.assertTrue(all([x == y for x, y in zip(actual, expect)])) + + def test_shell_keyboard_interrupt(self): + shell_mock = mock.MagicMock() + with mock.patch('keystoneclient.shell.OpenStackIdentityShell.main', + shell_mock): + try: + shell_mock.side_effect = KeyboardInterrupt() + openstack_shell.main() + except SystemExit as ex: + self.assertEqual(130, ex.code)