Use argparse to run 1 of 2 functions in my script

后端 未结 3 1200
执念已碎
执念已碎 2020-12-18 17:01

I currently have 2 functions in my .py script.

#1 connects to the database and does some processing.

#2 does some other processing on files

Currently

3条回答
  •  执笔经年
    2020-12-18 17:18

    If it's just a flag of run A or B, then a simple "store_true" argument should be fine.

    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--run_a_not_b', action='store_true')
    _StoreTrueAction(option_strings=['--run_a_not_b'], dest='run_a_not_b', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
    >>> parser.parse_args('--run_a_not_b')
    >>> parsed_args = parser.parse_args('--run_a_not_b'.split())
    >>> if parsed_args.run_a_not_b:
        print "run a"
    else:
        print "run b"
    
    
    run a
    >>> parsed_args = parser.parse_args(''.split())
    >>> if parsed_args.run_a_not_b:
        print "run a"
    else:
        print "run b"
    
    
    run b
    

    Or if you want to actually pass in the name of the function to call, you can do it this (somewhat hackish) way:

    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--func_to_run', type=str)
    _StoreAction(option_strings=['--func_to_run'], dest='func_to_run', nargs=None, const=None, default=None, type=, choices=None, help=None, metavar=None)
    >>> parsed_args = parser.parse_args('--func_to_run my_other_func'.split())
    >>> parsed_args.func_to_run
    'my_other_func'
    >>> f = globals()[parsed_args.func_to_run]
    
    >>> f()
    

    edit : to handle an integer argument, you would simply specify the type

    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--run_a_not_b', action='store_true')
    >>> parser.add_argument('--func_arg', type=int)
    >>> parsed_args = parser.parse_args('--run_a_not_b --arg 42'.split())
    >>> parsed_args = parser.parse_args('--run_a_not_b --func_arg 42'.split())
    >>> parsed_args
    Namespace(func_arg=42, run_a_not_b=True)
    

    So, you can simply get parsed_args.func_arg for the value if you choose in this example.

提交回复
热议问题