You may be interested in the following approach.
import argparse, sys print(sys.argv) if len(sys.argv) == 2: sys.argv += ['-t', 'time', '-x', 'expression', '-n', 'name'] else: sys.argv.append('FILE') parser = argparse.ArgumentParser() group = parser.add_argument_group('Required Group', 'All 3 are required else provide "file" argument.') group.add_argument("-t","--time", required=True) group.add_argument("-x","--expression", required=True) group.add_argument("-n","--name", required=True) parser.add_argument("file", help='file name') print(parser.parse_args())
Here is an example output.
$ ./t.py -t 2 -x "a + b" -n George ['./t.py', '-t', '2', '-x', 'a + b', '-n', 'George'] Namespace(expression='a + b', file='FILE', name='George', time='2') $ ./t.py FILE ['./t.py', 'FILE'] Namespace(expression='expression', file='FILE', name='name', time='time') $ ./t.py -h usage: t.py [-h] -t TIME -x EXPRESSION -n NAME file positional arguments: file file name optional arguments: -h, --help show this help message and exit Required Group: All 3 are required else provide "file" argument. -t TIME, --time TIME -x EXPRESSION, --expression EXPRESSION -n NAME, --name NAME
source share