Command line applications (CLIs) are a time-honored and versatile method of interacting with applications, providing a robust and efficient interface for users.
They offer a unique blend of power, speed, and flexibility, making them an indispensable tool in a developer's arsenal.
In this tutorial, we will delve into the creation of three highly useful command-line applications using Python, a popular and versatile programming language.
Our journey will begin with the development of an image resizer. Next, we will turn our attention to creating a password generator. Finally, we will round out our tutorial with the creation of a currency converter.
Whether you're a seasoned developer or a beginner just starting your coding journey, this tutorial offers valuable insights and practical skills for everyone.
You can also follow along this article in a video format:
Prerequisites
To follow along, you'll need Python 3.x installed on your system, along with the click
library, which you can install with:
pip install click
Additionally, for each of the applications, additional libraries will be needed, but you will install them as we go through the applications and their code.
Image Resizer
We will get started with a simple script that resizes images using the Python Imaging Library (PIL) and the Click library.
You need to have the Python Imaging Library (PIL) installed in your Python environment. If it's not installed, you can install it using pip:
pip install pillow
Here's a basic example (you can create a file called image_resizer.py
):
from PIL import Image
import click
@click.command()
@click.argument('input_file', type=click.Path(exists=True))
@click.argument('output_file', type=click.Path())
@click.option('--width', default=None, help='New width of the image.')
@click.option('--height', default=None, help='New height of the image.')
def resize_image(input_file, output_file, width, height):
image = Image.open(input_file)
if width and height:
new_size = (int(width), int(height))
elif width:
width = float(width)
new_size = (int(width), int(image.size[1] * width / image.size[0]))
elif height:
height = float(height)
new_size = (int(image.size[0] * height / image.size[1]), int(height))
else:
raise click.BadOptionUsage(message='Either --width or --height must be specified.', option_name='')
image = image.resize(new_size, Image.BICUBIC)
image.save(output_file)
click.echo(f'Image resized and saved as {output_file}')
if __name__ == '__main__':
resize_image()
This code defines a command-line interface (CLI) for resizing images using the Python Imaging Library (PIL) and the click
library.
Here's a breakdown of the code:
- The
resize_image
function is defined and decorated with@click.command()
, which indicates that this function is the main command of the script. - The
@click.argument
decorators are used to define command line arguments. Theinput_file
argument is the path to the image file to be resized, and it must be an existing file. Theoutput_file
argument is the path where the resized image will be saved. - The
@click.option
decorators are used to define command line options. The--width
and--height
options allow the user to specify the new width and height of the image, respectively. By default, these options are set toNone
, meaning they are not required. - Inside the
resize_image
function, the image is opened usingImage.open(input_file)
. Then, the new size of the image is calculated based on the provided width and height.- If both width and height are provided, they are converted to float values and then to integers to avoid the
TypeError
that was mentioned earlier. - If only one of them is provided, the aspect ratio of the image is maintained by calculating the other dimension using the original image size.
- If neither is provided, an error is raised using
click.BadOptionUsage
.
- If both width and height are provided, they are converted to float values and then to integers to avoid the
- The image is then resized using the
Image.resize
method with the calculated new size and theImage.BICUBIC
filter. The resized image is saved using theImage.save
method. - Finally, a message is printed to the console using
click.echo
to confirm that the image has been resized and saved.
You can run this script with different options to resize images. For example, you can resize an image to 200x200 pixels by running the following command:
python image_resizer.py input.png output.png --width 200 --height 200
You can also specify either the width or the height:
python image_resizer.py input.png output.png --width 200
python image_resizer.py input.png output.png --height 200
Password Generator
Now let's focus on creating a password generator command line application. You don't need any additional library other than the Click library.
This article is for paid members only
To continue reading this article, upgrade your account to get full access.
Subscribe NowAlready have an account? Sign In