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 someone

  • add numbers

  • convert Celsius to Fahrenheit

  • version 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 input

  • Add default values

  • Use argparse.FileType() to load files

  • Wrap 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!

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