# Agrh, argparse!

Did you ever say "argh" trying to remember the details of optparse or argparse API? If yes, this package may be useful for you. It provides a very simple wrapper for argparse with support for hierarchical commands that can be bound to modules or classes. Argparse can do it; argh makes it easy.

## In a nutshell

Here's a list of features that argh adds to argparse:

• mark a function as a CLI command and specify its arguments before the parser is instantiated;
• nested commands made easy: no messing with subparsers (though they are of course used under the hood);
• infer agrument type from the default value;
• infer command name from function name;
• add an alias root command help for the --help argument;
• enable passing unwrapped arguments to certain functions instead of a argparse.Namespace object.

Argh is fully compatible with argparse. You can mix argh-agnostic and argh-aware code. Just keep in mind that argh.dispatch does some extra work that a custom dispatcher may not do.

## Installation

\$ pip install argh

## Example

A very simple application with one command:

@command
def echo(text='hello'):
print text

parser = ArghParser()

if __name__ == '__main__':
parser.dispatch()


The powerful API of argparse is also available:

@arg('text', default='hello world', nargs='+', help='The message')
def echo(args):
print args.text


The approaches can be safely combined.

## Dependencies

Argh runs on Python 2.x (since 2.6, incl. PyPy) and 3.x. See documentation.

## Documentation

See the complete documentation for details. If it's not complete enough, feel free to ask your questions or submit bugs.

## Author

Originally written by Andrey Mikhaylenko in 2010.

See file AUTHORS for a complete authors list of this application.

Please feel free to submit patches, report bugs or request features:

http://bitbucket.org/neithere/argh/issues/

Here's the discussion group: