Python: argument parser that handles global options to sub-commands properly

argparse, command-line-arguments, parsing, python, subcommand

Solution

Give docopt a try:

>>> from docopt import docopt

>>> usage = """
... usage: prog.py command [--test]
...        prog.py another [--test]
... 
... --test  Perform the test."""

>>> docopt(usage, argv='command --test')
{'--test': True,
 'another': False,
 'command': True}

>>> docopt(usage, argv='--test command')
{'--test': True,
 'another': False,
 'command': True}

Problem

argparse fails at dealing with sub-commands receiving global options: ``` import argparse p = argparse.ArgumentParser() p.add_argument('--arg', action='store_true') s = p.add_subparsers() s.add_parser('test') ``` will have `p.parse_args('--arg test'.split())` work, but fails on `p.parse_args('test --arg'.split())`. Anyone aware of a python argument parser that handles global options to sub-commands properly?

Original source

Related problems