Arguments work very similarly to options. If you're familiar with functional programming, then you're familiar with arguments. The concept is the same in Click.
Let's edit our code a bit to see how we can integrate arguments.
# helloworld.py
import click
@click.command()
@click.option('-c', '--case', type=click.Choice(['upper', 'lower']))
@click.argument('person', default='you')
def hello(case, person):
response = "Hello World! Also, hey {} ☺️".format(person)
if case == 'upper':
click.echo(response.upper())
elif case == 'lower':
click.echo(response.lower())
else:
click.echo(response)
Just like with commands and options, Click provides a decorator to add arguments.
@click.argument('person', default='you')
We specify that hello()
should expect an argument person
to be passed in when it's called, and add a default value so that it's ok to call the command without passing in the argument.
Saving and running the app gives the following results:
(venv) $ hello # no argument - default will be used
Hello World! Also, hey you ☺️
(venv) $ hello Meg # Meg is the argument
Hello World! Also, hey Meg ☺️
(venv) $ hello chris -c upper # combining arguments with options
HELLO WORLD! ALSO, HEY CHRIS ☺️
With options and arguments, you can add a lot of functionality to a single command.