Python, accept arguments from command line

Python offers several ways to handle arguments passed when we invoke the program from the command line.

So far you’ve run programs either from a REPL, or using

python <filename>.py

You can pass additional arguments and options when you do so, like this:

python <filename>.py <argument1>
python <filename>.py <argument1> <argument2>

A basic way to handle those arguments is to use the sys module from the standard library.

You can get the arguments passed in the sys.argv list:

import sys
print(len(sys.argv))
print(sys.argv)

The sys.argv list contains as the first item the name of the file that was ran, e.g. ['main.py'].

This is a simple way, but you have to do a lot of work. You need to validate arguments, make sure their type is correct, you need to print feedback to the user if they are not using the program correctly.

Python provides another package in the standard library to help you: argparse.

First you import argparse and you call argparse.ArgumentParser(), passing the description of your program:

import argparse

parser = argparse.ArgumentParser(
    description='This program prints the name of my dogs'
)

Then you proceed to add arguments you want to accept. For example in this program we accept a -c option to pass a color, like this: python program.py -c red

import argparse

parser = argparse.ArgumentParser(
    description='This program prints a color HEX value'
)

parser.add_argument('-c', '--color', metavar='color', required=True, help='the color to search for')

args = parser.parse_args()

print(args.color) # 'red'

If the argument is not specified, the program raises an error:

➜  python python program.py
usage: program.py [-h] -c color
program.py: error: the following arguments are required: -c

You can set an option to have a specific set of values, using choices:

parser.add_argument('-c', '--color', metavar='color', required=True, choices={'red','yellow'}, help='the color to search for')
➜  python python program.py -c blue
usage: program.py [-h] -c color
program.py: error: argument -c/--color: invalid choice: 'blue' (choose from 'yellow', 'red')

There are more options, but those are the basics.

And there are community packages that provide this functionality, too, like Click and Python Prompt Toolkit.

Download my free Python Handbook!

👀 Looking for a job? look at DEVJOBS (BETA) 🔥