Thursday, June 29, 2017

Something about Python Argparse

Its been decades I have been using sys.argv for simple tasks . But the thing is, sometimes we don't realize how good something is unless we use it.

The official document got me totally confused. So I wrote my own tutorial. Let's get started.

So the module to be imported is 'argparse'. First thing to do is , create a parser object.


parser = argparse.ArgumentParser()

Then we can add what arguments we want . These are the requirements.

  • I want a username. 
  • I also want to set a default.  If nothing is provided, then the default user will be used. 
  • If User name is provided , then that should be used. 
  • We should tell the user about this requirement through some kind of help instruction.


parser.add_argument("-user", default='Admin')

So to input a user, one needs to use the '-user' option. 


args = parser.parse_args()

Then we need to call the above. This will create a namespace.


>>> args
Namespace(user='Admin')

Note: The name space has the attribute 'user', not -user. This is done automatically. Similarly, - will be converted to underscore.


if args.user == 'Admin':
    print 'You nailed it!'
else:
    print 'This is a different user: ', args.user

Now we can use this to create some logic. That's it. So the whole program looks like this:


import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-user", default='Admin')

args = parser.parse_args()

if args.user == 'Admin':
    print 'You nailed it!'
else:
    print 'This is a different user: ', args.user


Arindam@TheArcs MINGW64 ~/Desktop/PyTrash
$ python argeparse_example.py
You nailed it!

This is how we use it. We call the program directly on the command line. We might provide some arguments or not. In above example, we didn't.


$ python argeparse_example.py -user User123
This is a different user:  User123


$ python argeparse_example.py --help
usage: argeparse_example.py [-h] [-user USER]

optional arguments:
  -h, --help  show this help message and exit
  -user USER

If no help description is provided, we can still use the -h or --help argument to invoke default created help. If we want to add some help instructions, we can use the description argument.


parser = argparse.ArgumentParser(description='Please enter a user name')


$ python argeparse_example.py --help
usage: argeparse_example.py [-h] [-user USER]

Please enter a user name

optional arguments:
  -h, --help  show this help message and exit
  -user USER