Python argparse

Python argparse #

Module to specify arguments from the command line when running Python scripts.

Module #

import argparse

Setting up the parser #

Container to hold the arguments.


# Set up the parser
parser = argparse.ArgumentParser(description = '<some descriptive text>')


# Then add arguments
# these are positional arguments, where order in call of script matters.

parser.add_argument('<argument1>', type = <int, str, etc>, help = '<descriptive text for how to use the argument>')

parser.add_argument('<argument2>', type = <int, str, etc>, help = '<descriptive text for how to use the argument>')

# Then parse the arguments
args = parser.parse_args()

Using the arguments #

Now that the arguments have been loaded and parsed, now we define how to use the arguments.

def some_function(args.<argument1>, args.<argument2>):
    """
    This function should have logic that uses the argument(s)
    """
    ...

From the command line #

Assuming the argparse module hsa been properly loaded and coded into the script.

> python3 <script>.py <argument1> <argument2>

To get help:

python3 <script>.py -h

Example #

A complete example:

import argparse

parser = argparse.ArgumentParser(description = "just add two numbers together")

parser.add_argument('first_num', type = float, help = 'first number')

parser.add_argument('second_num', type = float, help = 'second number')

args = parser.parse_args()

def add_two_nums(first_num, second_num):
    sum = first_num + second_num

    return sum

if __name__ == '__main__':
    print add_two_nums(args.first_num, args.second_num)

Optional arguments #

An alternative to positional arguments are optional arguments. These are implemented by adding a double dash before the argument name.

parser.add_argument('--<argument1>', type = '<int, str, etc>', help = '<descriptive text for how to use the argument>')

parser.add_argument('--<argument2>', type = '<int, str, etc>', help = '<descriptive text for how to use the argument>')

Can also add a shortened notation for the argument with a single dash.

parser.add_argument('-a', '--<argument1>', type = '<int, str, etc>', help = '<descriptive text for how to use the argument>')

parser.add_argument('-b','--<argument2>', type = '<int, str, etc>', help = '<descriptive text for how to use the argument>')

To call, specificy argument name or shortened notation.

> python3 <script>.py -a <argument1> -b <argument2>

or switch orders:

> python3 <script>.py -b <argument2> -a <argument1> 

When using optional arguments, if no argument is specified, they get populated with None.

Arguments can be made required with a required=True parameter.

parser.add_argument('-a', '--<argument1>', type = '<int, str, etc>', required=True, help = '<descriptive text for how to use the argument>')

parser.add_argument('-b','--<argument2>', type = '<int, str, etc>', required=True, help = '<descriptive text for how to use the argument>')

Mutually exclusive arguments #

action="store_true" – argument defaults to False, but when called, it becomes True.

group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action="store_true", help = 'print quiet')
group.add_argument('-v', '--verbose', action="store_true", help = 'print verbose')

Then use conditionally:

...

if __name__ == '__main__':
    variable = some_function(args.<argument1>, args.<argument2>)
    if args.quiet:
        print variable
    elif args.verbone:
        print "Some string"
    elif:
        print "some other string"