summaryrefslogtreecommitdiff
path: root/cmd2.py
diff options
context:
space:
mode:
Diffstat (limited to 'cmd2.py')
-rwxr-xr-xcmd2.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/cmd2.py b/cmd2.py
index 552e8fec..023db442 100755
--- a/cmd2.py
+++ b/cmd2.py
@@ -868,14 +868,14 @@ class AddSubmenu(object):
raise ValueError("reformat_prompt should be either a format string or None")
self.reformat_prompt = reformat_prompt
+ self.shared_attributes = {} if shared_attributes is None else shared_attributes
if require_predefined_shares:
- for attr in shared_attributes.keys():
+ for attr in self.shared_attributes.keys():
if not hasattr(submenu, attr):
raise AttributeError("The shared attribute '{attr}' is not defined in {cmd}. Either define {attr} "
"in {cmd} or set require_predefined_shares=False."
.format(cmd=submenu.__class__.__name__, attr=attr))
- self.shared_attributes = {} if shared_attributes is None else shared_attributes
self.create_subclass = create_subclass
self.preserve_shares = preserve_shares
@@ -1024,6 +1024,7 @@ class Cmd(cmd.Cmd):
allow_cli_args = True # Should arguments passed on the command-line be processed as commands?
allow_redirection = True # Should output redirection and pipes be allowed
default_to_shell = False # Attempt to run unrecognized commands as shell commands
+ quit_on_sigint = True # Quit the loop on interrupt instead of just resetting prompt
reserved_words = []
# Attributes which ARE dynamically settable at runtime
@@ -1897,7 +1898,14 @@ class Cmd(cmd.Cmd):
self.poutput('{}{}'.format(self.prompt, line))
else:
# Otherwise, read a command from stdin
- line = self.pseudo_raw_input(self.prompt)
+ if not self.quit_on_sigint:
+ try:
+ line = self.pseudo_raw_input(self.prompt)
+ except KeyboardInterrupt:
+ self.poutput('^C')
+ line = ''
+ else:
+ line = self.pseudo_raw_input(self.prompt)
# Run the command along with all associated pre and post hooks
stop = self.onecmd_plus_hooks(line)