Build Your Own Python CLI Tool with argparse


Command-line tools are everywhere: git
, pip
, ls
, npm
... What if you could build your own?
In this post, you'll learn how to create a custom Python CLI app using argparse
. This lets users run your script like a real command:
bashCopyEditpython tool.py greet --name Alice
Let’s build a CLI tool that supports multiple commands like:
greet
someoneadd
numbersconvert
Celsius to Fahrenheitversion
output
🎯 Step 1: Setup the Script
pythonCopyEditimport argparse
parser = argparse.ArgumentParser(
description="A simple multi-purpose CLI tool in Python"
)
subparsers = parser.add_subparsers(dest="command")
👋 Command: Greet
pythonCopyEditgreet_parser = subparsers.add_parser("greet", help="Say hello to someone")
greet_parser.add_argument("--name", type=str, required=True, help="Name of the person")
➕ Command: Add
pythonCopyEditadd_parser = subparsers.add_parser("add", help="Add two numbers")
add_parser.add_argument("x", type=int)
add_parser.add_argument("y", type=int)
🌡️ Command: Convert Celsius to Fahrenheit
pythonCopyEditconvert_parser = subparsers.add_parser("convert", help="Convert Celsius to Fahrenheit")
convert_parser.add_argument("celsius", type=float)
🧪 Command: Version
pythonCopyEditsubparsers.add_parser("version", help="Show version info")
🧠 Step 2: Handle Commands
pythonCopyEditargs = parser.parse_args()
if args.command == "greet":
print(f"Hello, {args.name}!")
elif args.command == "add":
print(f"Sum: {args.x + args.y}")
elif args.command == "convert":
fahrenheit = (args.celsius * 9/5) + 32
print(f"{args.celsius}°C = {fahrenheit}°F")
elif args.command == "version":
print("MyCLI Tool v1.0.0")
else:
parser.print_help()
🚀 Usage Examples
bashCopyEditpython tool.py greet --name Alice
python tool.py add 5 7
python tool.py convert 30
python tool.py version
💡 Bonus Tips
Add
choices
to restrict inputAdd
default
valuesUse
argparse.FileType()
to load filesWrap this in
if __name__ == "__main__":
for reusability
🧵 Wrapping Up
The argparse
library turns your Python scripts into professional-looking CLI apps — no need for external dependencies.
✅ It’s ideal for automation, dev tools, data pipelines, or just leveling up your script UX.
Want to make this installable via pip
, or upgrade to Typer
/Click
later? Let me know and we’ll build version 2.0!
Subscribe to my newsletter
Read articles from Ashraful Islam Leon directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Ashraful Islam Leon
Ashraful Islam Leon
Passionate Software Developer | Crafting clean code and elegant solutions