Commandline Interfaces Bouwen in Python met Click

Wanneer je in Python een commandline tooltje bouwt, en je behoeftes voor het parsen van opties en argumenten meer wordt dan alleen maar wat argumenten lezen, zul je al snel een library gaan zoeken die daar bij kan helpen.

De twee standaard opties zijn argparse en optparse, maar er zijn ook libraries die meer kunnen, en makkelijker zijn in het gebruik.

In deze video kijkt Wander naar (de basis van) Click, een library die het erg makkelijk maakt om ook met sub-commando’s te werken.

De homepage van Click kun je hier vinden: https://palletsprojects.com/p/click/

Code

De code, voor de mensen die niet uit de video willen overtikken:

 1#!/usr/bin/env python3
 2import click
 3
 4@click.group()
 5@click.pass_context
 6@click.option('--count', '-c', default=1, help='Aantal keren om te groeten per NAME')
 7def cli(ctx, count):
 8    """
 9      Universele greeter
10    """
11    ctx.ensure_object(dict)
12    ctx.obj['count'] = count
13
14@cli.command()
15@click.pass_obj
16@click.argument('name', nargs=-1)
17def greeter(cfg, name):
18    """
19      Zeg hallo tegen NAME
20    """
21    for n in name:
22        for i in range(cfg.get('count', 1)):
23            click.echo(f"Hallo {n}")
24
25@cli.command()
26@click.pass_obj
27@click.option('--treurig', is_flag=True, default=False)
28@click.argument('name', nargs=-1)
29def goodbye(cfg, treurig, name):
30    """
31      Zeg "tot ziens" tegen NAME
32    """
33    for n in name:
34        for i in range(cfg.get('count', 1)):
35            click.echo(f'Tot ziens {n}{", we gaan je missen.." if treurig else ""}')

Gerelateerde posts