Python : Agrument Parser

Python3 provides

  • an argparse module for working with command line arguments / parameters.
Module Function Usage
argparse <Argument_Parser> . add_argument ( agrument name or flags, … ) defines the parsing of the command line arguments.

The add_argument function expects an argument name ( positional argument ) or a series of flags ( optional argument ). Optional arguments are identified by the ( - ) prefix.


Python3 program using positional and optional arguments.

  • The optional argument could be set to a default value using default=‘default_value’.

example.py

import argparse

def main() :

    arg_parser = argparse.ArgumentParser(description = 'Enter user details')

    # Add the arguments

    # Add positional argument
    arg_parser.add_argument('alfa')

    # Add optional argument
    arg_parser.add_argument('-p', '--particle', default = 'Electron')

    # Add positional argument
    arg_parser.add_argument('beta')

    args = arg_parser.parse_args()

    print ("Arguments passed : ", end = '')
    print ((args.alfa, args.particle, args.beta))

if __name__ == "__main__" :
    main()

Output

$ python3 example.py --help
usage: example.py [-h] [-p PARTICLE] alfa beta

Enter user details

positional arguments:
  alfa
  beta

optional arguments:
  -h, --help            show this help message and exit
  -p PARTICLE, --particle PARTICLE

$ python3 example.py 
usage: exmaple.py [-h] [-p PARTICLE] alfa beta
example.py: error: the following arguments are required: alfa, beta

$ python3 example.py arg_alfa arg_beta
Arguments passed : ('arg_alfa', 'Electron', 'arg_beta')

$ python3 example.py arg_alfa arg_beta -p Photon
Arguments passed : ('arg_alfa', 'Photon', 'arg_beta')

Python3 program to accept multiple optional arguments.

  • Multiple optional arguments are appended to a list using action=‘append’

example.py

import argparse
from pathlib import Path

def main() :

    arg_parser = argparse.ArgumentParser(description='Enter user details')

    # Add the arguments

    # Required argument
    arg_parser.add_argument('-u',
                           '--user',
                           help = 'Name of user.',
                           required = True)

    # Accepting multiple arguments
    arg_parser.add_argument('-s',
                           '--subscription',
                           help = 'Online subscription',
                           action = 'append',
                           required = True)

    args = arg_parser.parse_args()

    print ("Arguments passed : ", end = '')
    print ((args.user, args.subscription))

if __name__ == "__main__" :
    main()

Output

$ python3 example.py --help
usage: example.py [-h] -u USER -s SUBSCRIPTION

Enter user details

optional arguments:
  -h, --help            show this help message and exit
  -u USER, --user USER  Name of user.
  -s SUBSCRIPTION, --subscription SUBSCRIPTION
                        Online subscription

$ python3 example.py 
usage: example.py [-h] -u USER -s SUBSCRIPTION
example.py: error: the following arguments are required: -u/--user, -s/--subscription

$ python3 example.py -u Deltoid -s Netflix -s 'Amazon Prime' -s 'Disney'
Arguments passed : ('Deltoid', ['Netflix', 'Amazon Prime', 'Disney'])

Python3 program specifying type of the command line arguments.

  • Argument marked with type = <type> is used for converting the commad line argument to argument type like int / float / Path

example.py

import argparse
from pathlib import Path

def main() :

    arg_parser = argparse.ArgumentParser(description = 'Enter user details')

    # Required argument
    arg_parser.add_argument('-u',
                           '--user',
                           help = 'Name of user.',
                           required = True)

    # Required type of the argument set to int
    arg_parser.add_argument('-a',
                           '--age',
                           help = 'User\'s age (integer).',
                           type = int,
                           required = True)

    # Required type set to float
    arg_parser.add_argument('-w',
                           '--weight',
                           help = 'User\'s weight (float).',
                           type = float,
                           required = True)

    arg_parser.add_argument('-k',
                           '--public_key',
                           help = 'User\'s ssh public key.',
                           type = Path,
                           required = True)

    args = arg_parser.parse_args()

    print ("Arguments passed : ", end = '')
    print ((args.user, args.age, args.weight, args.public_key))

if __name__ == "__main__" :
    main()

Output

$ python3 example.py --help
usage: example.py [-h] -u USER -a AGE -w WEIGHT -k PUBLIC_KEY

Enter user details

optional arguments:
  -h, --help            show this help message and exit
  -u USER, --user USER  Name of user.
  -a AGE, --age AGE     User's age (integer).
  -w WEIGHT, --weight WEIGHT
                        User's weight (float).
  -k PUBLIC_KEY, --public_key PUBLIC_KEY
                        User's ssh public key.

$ python3 example.py --age 10a
usage: example.py [-h] -u USER -a AGE -w WEIGHT -k PUBLIC_KEY
example.py: error: argument -a/--age: invalid int value: '10a'

$ python3 example.py -u noddy --age 10 -w 20 -k ~/.ssh/id_rsa.pub
Arguments passed : ('noddy', 10, 20.0, PosixPath('/home/algotree/.ssh/id_rsa.pub'))



Copyright (c) 2019-2021, Algotree.org.
All rights reserved.