Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

nested subparsers with argparse

138 views
Skip to first unread message

Chris Withers

unread,
Aug 23, 2010, 9:16:14 AM8/23/10
to pytho...@python.org
Hi All,

I'm looking to build a script that has command line options as follows:

./myscript.py command subcommand [options]

I can do up to the command [options] bit with add_subparsers in
argparse, but how do I then add a second level of subparsers?

cheers,

Chris

Chris Withers

unread,
Aug 23, 2010, 10:19:30 AM8/23/10
to pytho...@python.org

Answering my own question, here's what worked for me:

"""
from argparse import ArgumentParser
from mock import Mock

m = Mock()

parser = ArgumentParser()
subparsers = parser.add_subparsers()

agroup = subparsers.add_parser('a')

command = subparsers.add_parser('b')
command.set_defaults(func=m.b)

subparsers = agroup.add_subparsers()
command = subparsers.add_parser('aa')
command.set_defaults(func=m.a.a)

command = subparsers.add_parser('ab')
command.set_defaults(func=m.a.b)

options = parser.parse_args()

options.func(options)

print m.method_calls
"""

If there's anything I could have done better, please let me know!

Chris

Peter Otten

unread,
Aug 23, 2010, 10:21:44 AM8/23/10
to
Chris Withers wrote:

It looks like subparsers behave like the toplevel parsers -- you can invoke
add_subparsers() on them, too.

0 new messages