clize: Turn functions into command-line interfaces

Clize is an argument parser for Python. It focuses on minimizing the effort required to create them:

  • Command-line interfaces are created by passing functions to clize.run.
  • Parameter types are deduced from the functions’ parameters.
  • A --help message is generated from your docstrings. Seriously, why does this still need to be a bullet point?
  • Decorators can be used to reuse functionality across functions.
  • Clize can be extended with new parameter behavior.

Here’s an example:

from sigtools.modifiers import kwoargs
from clize import run

@kwoargs('no_capitalize') # turns no_capitalize into a keyword-only parameter
                          # on Python 2
def hello_world(name=None, no_capitalize=False):
    """Greets the world or the given name.

    name: If specified, only greet this person.

    no_capitalize: Don't capitalize the given name.
    """
    if name:
        if not no_capitalize:
            name = name.title()
        return 'Hello {0}!'.format(name)
    return 'Hello world!'

if __name__ == '__main__':
    run(hello_world)

run takes the function and automatically produces a command-line interface for it:

$ pip install --user clize
$ python examples/hello.py --help
Usage: examples/hello.py [OPTIONS] [name]

Greets the world or the given name.

Positional arguments:
  name              If specified, only greet this person.

Options:
  --no-capitalize   Don't capitalize the give name.

Other actions:
  -h, --help        Show the help
$ python hello.py
Hello world!
$ python hello.py john
Hello John!
$ python hello.py dave --no-capitalize
Hello dave!

Interested?

Here is the full table of contents: