Python calling a module that uses argparser

The first argument to parse_args is a list of arguments. By default it’s None which means use sys.argv. So you can arrange your script like this:

import argparse as ap

def main(raw_args=None):
    parser = ap.ArgumentParser(
        description='Gathers parameters.')
    parser.add_argument('-f', metavar="--file", type=ap.FileType('r'), action='store', dest="file",
                        required=True, help='Path to json parameter file')
    parser.add_argument('-t', metavar="--type", type=str, action='store', dest="type",
                        required=True, help='Type of parameter file.')
    parser.add_argument('-g', metavar="--group", type=str, action='store', dest="group",
                        required=False, help='Group to apply parameters to')
    # Gather the provided arguments as an array.
    args = parser.parse_args(raw_args)
    print(vars(args))


# Run with command line arguments precisely when called directly
# (rather than when imported)
if __name__ == '__main__':
    main()

And then elsewhere:

from first_module import main

main(['-f', '/etc/hosts', '-t', 'json'])

Output:

{'group': None, 'file': <_io.TextIOWrapper name="/etc/hosts" mode="r" encoding='UTF-8'>, 'type': 'json'}

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)