Using the argparse output to call functions

前端 未结 3 1147
北恋
北恋 2021-02-14 06:39

Currently my code looks like this. It allows me to parse multiple parameters my program script gets. Is there a different way that is closer to \'best practices\'? I haven\'t se

3条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-14 06:55

    See http://docs.python.org/library/argparse.html#sub-commands:

    One particularly effective way of handling sub-commands is to combine the use of the add_subparsers() method with calls to set_defaults() so that each subparser knows which Python function it should execute.

    In a nutshell:

    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()
    
    weather_parser = subparsers.add_parser('get-weather')
    weather_parser.add_argument('--bar')
    weather_parser.set_defaults(function=get_weather)  # !
    
    args = parser.parse_args(['get-weather', '--bar', 'quux'])
    print args.function(args)
    

    Here we create a subparser for the command get-weather and assign the function get_weather to it.

    Note that the documentation says that the keyword/attribute is named func but it's definitely function as of argparse 1.1.

    The resulting code is a bit too wordy so I've published a small package "argh" that makes things simpler, e.g.:

    parser = argparse.ArgumentParser()
    add_commands(parser, [get_weather])
    print dispatch(parser, ['get-weather', '--bar', 'quux'])
    

    "Argh" can do more but I'll let stack overflow answer that. :-)

提交回复
热议问题