Command-line arguments#
Python scripts can parse command-line arguments provided by the user.
argparse#
Python contains the argparse module for parsing command-line arguments.
#!/usr/bin/env python
import argparse
def say_hello(name):
"""Small CLI tool to say hello."""
print(f"Hello {name}!")
if __name__ == "__main__":
# Initialize the parser using the function docstring as description.
parser = argparse.ArgumentParser(description=say_hello.__doc__)
# Define the supported command-line arguments.
parser.add_argument("--name", "-n", help="Your name", default="world")
# Parse the provided command-line arguments into args.
args = parser.parse_args()
# Call the function with the name argument.
say_hello(args.name)
Presuming you saved the above code as hello_cli.py
, you can then provide the command-line options at runtime.
$ ./hello_cli.py
Hello world!
$ ./hello_cli.py --name Jane
Hello Jane!
$ ./hello_cli.py -n Jane
Hello Jane!
$ ./hello_cli.py --help
usage: hello_cli.py [-h] [--name NAME]
Small CLI tool to say hello.
options:
-h, --help show this help message and exit
--name NAME, -n NAME Your name
Note that the --help
option was added automatically and will show the function docstring and usage options.
click#
The third-party package click provides a “Command Line Interface Creation Kit” to build advanced command-line applications. It’s syntax makes heavy use of function @decorators, which boil down to a fancy notation (also known as syntactic sugar) for function-of-a-function. This syntax allows for a terse, yet highly readable code.
#!/usr/bin/env python
import click
@click.command()
@click.option("--name", "-n", help="Your name", default="world")
def say_hello(name):
"""Small CLI tool to say hello."""
print(f"Hello {name}!")
if __name__ == "__main__":
say_hello()