Skip to content
Related Articles

Related Articles

Python | How to Parse Command-Line Options

Improve Article
Save Article
Like Article
  • Last Updated : 12 Jun, 2019

In this article, we will discuss how to write a Python program to parse options supplied on the command line (found in sys.argv). The argparse module can be used to parse command-line options.

Code #1 : Using argparse module

Hypothetical command-line tool for searching a 
collection of files for one or more text patterns.
import argparse
parser = argparse.ArgumentParser(description ='Search some files')
parser.add_argument(dest ='filenames', metavar ='filename', nargs ='*')
parser.add_argument('-p', '--pat', metavar ='pattern'
                    required = True, dest ='patterns'
                    action ='append'
                    help ='text pattern to search for')
parser.add_argument('-v', dest ='verbose',
                    action ='store_true', help ='verbose mode')
parser.add_argument('-o', dest ='outfile'
                    action ='store', help ='output file')
parser.add_argument('--speed', dest ='speed'
                    action ='store', choices = {'slow', 'fast'},
                    default ='slow', help ='search speed')
args = parser.parse_args()

The program mentioned above defines a command-line parser with the following usage –

bash % python3 -h
usage: [-h] [-p pattern] [-v] [-o OUTFILE] 
  [--speed {slow, fast}] [filename [filename ...]]

Search some files

positional arguments:

optional arguments:
-h, --help           show this help message and exit
-p pattern,    --pat pattern
                 text pattern to search for
-v                   verbose mode
-o OUTFILE           output file
--speed {slow, fast}  search speed

Observe the output of the print() statements.

Code: The following session shows how data shows up in the program.

bash % python3 foo.txt bar.txt
usage: [-h] -p pattern [-v] [-o OUTFILE]
  [--speed {fast, slow}] [filename [filename ...]] error: the following arguments are required: -p/--pat
bash % python3 -v -p spam --pat = eggs 
           foo.txt bar.txt
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = None
speed = slow
bash % python3 -v -p spam --pat = eggs 
                 foo.txt bar.txt -o results
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = results
speed = slow
bash % python3 -v -p spam --pat = eggs 
            foo.txt bar.txt -o results \--speed = fast
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = results
speed = fast
  • The argparse module is one of the largest modules in the standard library, and has a huge number of configuration options. This codes above show an essential subset that can be used and extended to get started.
  • To parse options, you first create an ArgumentParser instance and add declarations for the options you want to support it using the add_argument() method.
  • In each add_argument() call, the dest argument specifies the name of an attribute where the result of parsing will be placed.
  • The metavar argument is used when generating help messages.
  • The action argument specifies the processing associated with the argument and is often store for storing a value or append for collecting multiple argument values into a list.

Code : Argument collects all of the extra command-line arguments into a list. It’s being used to make a list of filenames

parser.add_argument(dest = 'filenames',
                    metavar = 'filename', nargs = '*')

Code : Argument sets a Boolean flag depending on whether or not the argument was provided

parser.add_argument('-v', dest = 'verbose'
                    action = 'store_true'
                    help = 'verbose mode')

Code : Argument takes a single value and stores it as a string

parser.add_argument('-o', dest = 'outfile'
                    action = 'store', help = 'output file')

The following argument specification allows an argument to be repeated multiple times and all of the values append into a list. The required flag means that the argument must be supplied at least once.

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!