mirror of
https://github.com/m-lamonaca/dev-notes.git
synced 2025-04-07 19:36:40 +00:00
76 lines
1.7 KiB
Markdown
76 lines
1.7 KiB
Markdown
|
# [Click](https://click.palletsprojects.com) Lib
|
|||
|
|
|||
|
## Command Creation
|
|||
|
|
|||
|
```py
|
|||
|
import click
|
|||
|
|
|||
|
# the decorator converts the function into a Command which then can be invoked
|
|||
|
@click.command()
|
|||
|
def hello():
|
|||
|
click.echo('Hello World!')
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
hello()
|
|||
|
```
|
|||
|
|
|||
|
### Nesting Commands
|
|||
|
|
|||
|
Commands can be attached to other commands of type `Group`. This allows arbitrary nesting of scripts. As an example here is a script that implements two commands for managing databases:
|
|||
|
|
|||
|
```py
|
|||
|
@click.group()
|
|||
|
def cli():
|
|||
|
pass
|
|||
|
|
|||
|
@click.command()
|
|||
|
def initdb():
|
|||
|
click.echo('Initialized the database')
|
|||
|
|
|||
|
@click.command()
|
|||
|
def dropdb():
|
|||
|
click.echo('Dropped the database')
|
|||
|
|
|||
|
cli.add_command(initdb)
|
|||
|
cli.add_command(dropdb)
|
|||
|
```
|
|||
|
|
|||
|
The `group()` decorator works like the `command()` decorator, but creates a Group object instead which can be given multiple subcommands that can be attached with `Group.add_command()`.
|
|||
|
|
|||
|
For simple scripts, it’s also possible to automatically attach and create a command by using the `Group.command()` decorator instead.
|
|||
|
The above script can instead be written like this:
|
|||
|
|
|||
|
```py
|
|||
|
@click.group()
|
|||
|
def cli():
|
|||
|
pass
|
|||
|
|
|||
|
@cli.command()
|
|||
|
def initdb():
|
|||
|
click.echo('Initialized the database')
|
|||
|
|
|||
|
@cli.command()
|
|||
|
def dropdb():
|
|||
|
click.echo('Dropped the database')
|
|||
|
```
|
|||
|
|
|||
|
You would then invoke the Group in your setuptools entry points or other invocations:
|
|||
|
|
|||
|
```py
|
|||
|
if __name__ == '__main__':
|
|||
|
cli()
|
|||
|
```
|
|||
|
|
|||
|
### Adding Parameters
|
|||
|
|
|||
|
To add parameters, use the `option()` and `argument()` decorators:
|
|||
|
|
|||
|
```py
|
|||
|
@click.command()
|
|||
|
@click.option('--count', default=1, help='number of greetings')
|
|||
|
@click.argument('name')
|
|||
|
def hello(count, name):
|
|||
|
for x in range(count):
|
|||
|
click.echo(f'Hello {name}!')
|
|||
|
```
|