Mico
Mico

Reputation: 413

argparse: Conditional add_argument

I am just new with Python and I am trying out argparse. I want to add an argument if the first argument is equal to something.

import argparse

class ArgsParser :
    def __init__(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('command')
        args = parser.parse_args()
        if args.command == 'a' :
            parser.add_argument('-b', required=True)
            args = parser.parse_args()
            self.b = args.b

def main():
    parser = ArgsParser();
    print parser.b

if __name__ == '__main__':
    main()

When I run the script using

prog.py a -b="abc"

It gives an error

prog.py: error: unrecognized arguments: -b=abc

But if I run the script using

prog.py a

The result would be

prog.py: error: argument -b is required

Upvotes: 1

Views: 302

Answers (1)

mgilson
mgilson

Reputation: 309949

I think you can do this with subparsers:

>>> import argparse
>>> parse = argparse.ArgumentParser()
>>> subparsers = parse.add_subparsers()
>>> parse_a = subparsers.add_parser('a')
>>> parse_a.add_argument('-b', required=True)
_StoreAction(option_strings=['-b'], dest='b', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parse.parse_args(['a'])
usage:  a [-h] -b B
 a: error: argument -b is required

Upvotes: 1

Related Questions