I recently came across a program where we had to manage the command line arguments. And the easy way to go do that was using argparse package.
argparse
is a Python module in the standard library that provides a mechanism for parsing command-line arguments. It makes it easy to write user-friendly command-line interfaces for your Python programs.
What can you do with it? Let me show you some of the capabilities.
Command Line Help
Following is a simple program with argparse.
import argparse
def main() -> None:
parser = argparse.ArgumentParser(
prog='Sample Program',
description='Demonstrated Argparse Functionality',
epilog='Happy coding')
parser.add_argument('-f', '--filename') # positional argument
parser.add_argument('-c', '--count') # option that takes a value
parser.add_argument('-v', '--verbose') # on/off flag
args = parser.parse_args()
print(args.filename, args.count, args.verbose)
if __name__ == '__main__':
main()
You can run this in as a python program. When you execute the following command, you will see
python main.py --help
usage: Sample Program [-h] [-f FILENAME] [-c COUNT] [-v VERBOSE]
Demonstrated Argparse Functionality
options:
-h, --help show this help message and exit
-f FILENAME, --filename FILENAME
-c COUNT, --count COUNT
-v VERBOSE, --verbose VERBOSE
Happy coding
Required Arguments
You can make certain arguments as required like shown below.
parser.add_argument(‘-f’, ‘–filename’, required=True)
When you execute the program with out filename it will show you the message like below.
usage: Sample Program [-h] -f FILENAME [-c COUNT] [-v VERBOSE]
Sample Program: error: the following arguments are required: -f/--filename
Fixed Argument Values
Lets say filename has to be “text1.txt” or “text1.csv”. It can not be any value other than that. Then you can specify the choice to restrict the values like shown below.
parser.add_argument('-f', '--filename', required=True, choices=["text1.txt","text1.csv"])
If you try to run the program with invalid choice, you will get the following error.
usage: Sample Program [-h] -f {text1.txt,text1.csv} [-c COUNT] [-v VERBOSE]
Sample Program: error: argument -f/--filename: invalid choice: 'somefile.txt' (choose from 'text1.txt', 'text1.csv')
Constant Values
Suppose I do not want to pass the count, and set a default count to 1.
parser.add_argument('-c', '--count', const=1,action='store_const')
When the execute the program with the following command
python main.py -f text1.txt -c -v "verbose"
I see the values as
text1.txt 1 verbose
Notice that I am not passing argument after -c. It is a constant which is considered internally.
Closing Note
Argparse has a lot of features around command line arguments and execution. This is few of the ones which I noticed on the surface. There are more features like adding type safety to the arguments. I will be sure to post as I come across an interesting feature. Until then bye, see you around, and thanks for reading the blog.