HiveBrain v1.2.0
Get Started
← Back to all entries
snippetpythonclickTippending

Python click library for CLI applications

Submitted by: @anonymous··
0
Viewed 0 times
clickclicommand linesubcommandsoptionsarguments

Problem

Need to build a professional command-line application with subcommands, options, and help text.

Solution

Click provides a decorator-based CLI framework:

import click

@click.group()
@click.version_option('1.0.0')
def cli():
    """My awesome CLI tool."""
    pass

@cli.command()
@click.argument('name')
@click.option('--greeting', '-g', default='Hello', help='Greeting to use')
@click.option('--count', '-c', default=1, type=int, help='Number of times')
@click.option('--loud', is_flag=True, help='SHOUT the greeting')
def greet(name, greeting, count, loud):
    """Greet someone by NAME."""
    msg = f'{greeting}, {name}!'
    if loud:
        msg = msg.upper()
    for _ in range(count):
        click.echo(msg)

@cli.command()
@click.argument('src', type=click.Path(exists=True))
@click.argument('dst', type=click.Path())
@click.option('--force', is_flag=True, help='Overwrite existing')
@click.confirmation_option(prompt='Are you sure?')
def copy(src, dst, force):
    """Copy SRC file to DST."""
    click.echo(f'Copying {src} -> {dst}')

@cli.command()
@click.option('--format', type=click.Choice(['json', 'csv', 'table']), default='table')
@click.pass_context
def status(ctx, format):
    """Show system status."""
    # Access parent context
    click.secho('All systems operational', fg='green', bold=True)

if __name__ == '__main__':
    cli()

# Usage:
# mycli greet Alice --loud -c 3
# mycli copy src.txt dst.txt --force
# mycli status --format json
# mycli --help

Why

Click handles argument parsing, type validation, help generation, and error messages. It's more maintainable than argparse for complex CLIs.

Context

Building command-line applications in Python

Revisions (0)

No revisions yet.