Getting user input is an important part of any kind of application. Since we've already learned about options, adding a user prompt to our hello world app should be a breeze. All we need to do is add prompt=True
to the option decorator, so that it prompts the user for input if no option is passed in.
# helloworld.py
import click
@click.command()
@click.option('-c', '--case',
type=click.Choice(['upper', 'lower']),
prompt=True)
@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)
Save and run the app:
(venv) $ hello
Case (upper, lower): upper
HELLO WORLD! ALSO, HEY YOU ☺️
(venv) $ hello sally
Case (upper, lower): lower
hello world! also, hey sally ☺️
You may also set a custom prompt string if you wish:
# helloworld.py
import click
@click.command()
@click.option('-c', '--case',
type=click.Choice(['upper', 'lower']),
prompt='Please enter case')
@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)
The set string will now be displayed instead of the default prompt:
(venv) $ hello
Please enter case (upper, lower): upper
HELLO WORLD! ALSO, HEY YOU ☺️