Just to share and record what I have finalized eventually.
There are two solutions that I tried and eventually I picked up the subparser one although I think both ways work well to suit this task:
- Using subparser
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='command')
subparsers.required = True
# subparser for diff
parser_multi = subparsers.add_parser('diff')
# add required arguments
parser_diff.add_argument(
'-f1',
'--file1',
type=str,
required=True
)
parser_diff.add_argument(
'-f2',
'--file2',
type=str,
required=True
)
# subparser for format
parser_format = subparsers.add_parser('format')
# add a required argument
parser_format.add_argument(
'-f',
'--file',
type=str,
required=True
)
args = parser.parse_args()
- Using conditional args parser
import argparse
import sys
mode_choices = ['diff', 'format']
parser = argparse.ArgumentParser()
parser.add_argument('-m',
'--mode',
choices=mode_choices,
help='Choose mode to start',
required=True)
if True in list(map(lambda x: mode_choices[0] in x, sys.argv)):
parser.add_argument('-f1',
'--file1',
type=str,
required=True)
parser.add_argument('-f2',
'--file2',
type=str,
required=True)
if True in list(map(lambda x: mode_choices[1] in x, sys.argv)):
parser.add_argument('-f',
'--file',
type=str,
required=True)
args = parser.parse_args()