Python | How to Parse Command-Line Options
Last Updated :
13 Sep, 2022
In this article, we will discuss how to write a Python program to parse options supplied on the command line (found in sys.argv).
Parsing command line arguments using Python argparse module
The argparse module can be used to parse command-line options. This module provides a very user-friendly syntax to define input of positional and keyword arguments.
Example: Sample program to take command line inputs using argparse module
Python3
'''
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:
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
Note: Generally, argparse defines a --help option to print out all accepted arguments and their details. It will print all details about accepted arguments if we execute the script as follows:
python script_name.py --help
Code: The following session shows how data shows up in the program.
usage: search.py [-h] -p pattern [-v] [-o OUTFILE]
[--speed {fast, slow}] [filename [filename ...]]
Input:
python3 search.py -v -p spam --pat = eggs foo.txt bar.txt
Output:
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = None
speed = slow
- 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.
Argument collects all the extra command-line arguments into a list. It’s being used to make a list of filenames
Python3
parser.add_argument(dest = 'filenames',
metavar = 'filename', nargs = '*')
Argument sets a Boolean flag depending on whether the argument was provided
Python3
parser.add_argument('-v', dest = 'verbose',
action = 'store_true',
help = 'verbose mode')
Argument takes a single value and stores it as a string
Python3
parser.add_argument('-o', dest = 'outfile',
action = 'store', help = 'output file')