# argh

Bitbucket is a code hosting site with unlimited public and private repositories. We're also free for small teams!

Close

# 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()
parser.add_commands([echo])

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:

http://groups.google.com/group/argh-users

## Real-life usage

Among applications that use argh are Tool, OrgTool, Watchdog, Poni, Pyg and more. Well, there's probably no need to keep a complete and up-to-date list. Still, please let me know anyway if you use argh in your project. I'll be glad to know. :-)

## Licensing

Argh is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Argh is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with Argh. If not, see <http://gnu.org/licenses/>.

# Recent activity

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.