Python | How to Parse Command-Line Options

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 search.py -h
usage: search.py [-h] [-p pattern] [-v] [-o OUTFILE] 
  [--speed {slow, fast}] [filename [filename ...]]

Search some files

positional arguments:
          filename

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 search.py foo.txt bar.txt
usage: search.py [-h] -p pattern [-v] [-o OUTFILE]
  [--speed {fast, slow}] [filename [filename ...]]

search.py: error: the following arguments are required: -p/--pat
bash % python3 search.py -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 search.py -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 search.py -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.
python-utility
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.