Skip to content

Commit 23bd9af

Browse files
committed
Stop agrparse from calling sys.exit()
Signed-off-by: Nathaniel Mitchell <nathaniel.p.mitchell@intel.com>
1 parent 4f139a4 commit 23bd9af

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

chipsec_main.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def parse_args(argv: Sequence[str]) -> Optional[Dict[str, Any]]:
6464

6565
"""Parse the arguments provided on the command line."""
6666
parser = argparse.ArgumentParser(usage='%(prog)s [options]', formatter_class=argparse.RawDescriptionHelpFormatter,
67-
epilog=ExitCode.help_epilog, add_help=False)
67+
epilog=ExitCode.help_epilog, add_help=False, exit_on_error=False)
6868
options = parser.add_argument_group('Options')
6969
options.add_argument('-h', '--help', help="Show this message and exit", action='store_true')
7070
options.add_argument('-m', '--module', dest='_module', help='Specify module to run (example: -m common.bios_wp)')
@@ -100,7 +100,11 @@ def parse_args(argv: Sequence[str]) -> Optional[Dict[str, Any]]:
100100
adv_options.add_argument('-nl', dest='_autolog_disable', action='store_true', help="Chipsec won't save logs automatically")
101101
adv_options.add_argument('-rc', dest='_return_codes', help='Return codes mode', action='store_true')
102102

103-
par = vars(parser.parse_args(argv))
103+
try:
104+
par = vars(parser.parse_args(argv))
105+
except argparse.ArgumentError as arg_err:
106+
print(f'Argument parsing error: {str(arg_err)}')
107+
return None
104108
if par['help']:
105109
if par['_show_banner']:
106110
print_banner(argv, defines.get_version(), defines.get_message())

chipsec_util.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def parse_args(argv: Sequence[str]) -> Optional[Dict[str, Any]]:
8484
default_helper = options.get_section_data('Util_Config', 'default_helper', None)
8585
global_usage = "Additional arguments for specific command.\n\n All numeric values are in hex\n<width> is in {1, byte, 2, word, 4, dword}\n\n"
8686
cmds = import_cmds()
87-
parser = argparse.ArgumentParser(usage='%(prog)s [options] <command>', add_help=False)
87+
parser = argparse.ArgumentParser(usage='%(prog)s [options] <command>', add_help=False, exit_on_error=False)
8888
options = parser.add_argument_group('Options')
8989
options.add_argument('-h', '--help', dest='show_help', help="Show this message and exit", action='store_true')
9090
options.add_argument('-v', '--verbose', help='Verbose logging', action='store_true')
@@ -106,8 +106,11 @@ def parse_args(argv: Sequence[str]) -> Optional[Dict[str, Any]]:
106106
options.add_argument('_cmd', metavar='Command', nargs='?', choices=sorted(cmds.keys()), type=str.lower, default="help",
107107
help=f"Util command to run: {{{','.join(sorted(cmds.keys()))}}}")
108108
options.add_argument('_cmd_args', metavar='Command Args', nargs=argparse.REMAINDER, help=global_usage)
109-
par = vars(parser.parse_args(argv))
110-
109+
try:
110+
par = vars(parser.parse_args(argv))
111+
except argparse.ArgumentError as arg_err:
112+
print(f'Argument parsing error: {str(arg_err)}')
113+
return None
111114
if par['_cmd'] == 'help' or par['show_help']:
112115
if par['_show_banner']:
113116
print_banner(argv, get_version(), get_message())

0 commit comments

Comments
 (0)