List of arguments with argparse

后端 未结 2 792
时光说笑
时光说笑 2021-01-18 10:42

I\'m trying to pass a list of arguments with argparse but the only way that I\'ve found involves rewriting the option for each argument that I want to pass:

What I c

相关标签:
2条回答
  • 2021-01-18 11:28

    Being aware, you asked for argparse solution, I would like to present alternative solution using package docopt

    Install it first:

    $ pip install docopt
    

    Write the code:

    """Usage:
        main.py -a <arg>...
    """
    
    if __name__ == "__main__":
        from docopt import docopt
        resargs = docopt(__doc__)
        print resargs
    

    Run it to show usage instrucitons:

    $ python main.py
    Usage:
        main.py -a <arg>...
    

    Call it with your parameters:

    $ python main.py -a AA BB CC
    {'-a': True,
     '<arg>': ['AA', 'BB', 'CC']}
    

    Btw. if you do not need the -a option, you shall directly allow passing the arguments. It makes usage simpler to the user.

    0 讨论(0)
  • 2021-01-18 11:47

    Use nargs:

    ArgumentParser objects usually associate a single command-line argument with a single action to be taken. The nargs keyword argument associates a different number of command-line arguments with a single action.

    For example, if nargs is set to '+'

    Just like '*', all command-line args present are gathered into a list. Additionally, an error message will be generated if there wasn’t at least one command-line argument present.

    So, your code would look like

    parser.add_argument('-t', dest='table', help='', nargs='+')
    

    That way -t arguments will be gathered into list automatically (you don't have to explicitly specify the action).

    0 讨论(0)
提交回复
热议问题