snippetpythonclickTippending
Python click library for CLI applications
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 --helpWhy
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.