summaryrefslogtreecommitdiff
path: root/cmd2/cmd2.py
diff options
context:
space:
mode:
authorEric Lin <anselor@gmail.com>2018-04-25 18:22:46 -0400
committerEric Lin <anselor@gmail.com>2018-04-25 18:22:46 -0400
commit2a68a0ea0bdeff6286a9986c891b49d890fdd629 (patch)
tree4484974b2a35522a56c3442b661b219f7e9dc435 /cmd2/cmd2.py
parent0a1c41ce7048b45fc7ef9b0176d988c26861224e (diff)
downloadcmd2-git-2a68a0ea0bdeff6286a9986c891b49d890fdd629.tar.gz
Trap SystemExit when calling argparse.parse() to on argparse commands.
Diffstat (limited to 'cmd2/cmd2.py')
-rwxr-xr-xcmd2/cmd2.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index 4437426e..98334819 100755
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -251,8 +251,12 @@ def with_argparser_and_unknown_args(argparser: argparse.ArgumentParser) -> Calla
@functools.wraps(func)
def cmd_wrapper(instance, cmdline):
lexed_arglist = parse_quoted_string(cmdline)
- args, unknown = argparser.parse_known_args(lexed_arglist)
- return func(instance, args, unknown)
+ try:
+ args, unknown = argparser.parse_known_args(lexed_arglist)
+ except SystemExit:
+ return
+ else:
+ return func(instance, args, unknown)
# argparser defaults the program name to sys.argv[0]
# we want it to be the name of our command
@@ -288,8 +292,12 @@ def with_argparser(argparser: argparse.ArgumentParser) -> Callable:
@functools.wraps(func)
def cmd_wrapper(instance, cmdline):
lexed_arglist = parse_quoted_string(cmdline)
- args = argparser.parse_args(lexed_arglist)
- return func(instance, args)
+ try:
+ args = argparser.parse_args(lexed_arglist)
+ except SystemExit:
+ return
+ else:
+ return func(instance, args)
# argparser defaults the program name to sys.argv[0]
# we want it to be the name of our command