2017-07-24 75 views
0

如何爲每個選項使用不同數量的參數?python argparse參數不同數量不同

EX)a.py

parser.add_argument('--opt', type=str,choices=['a', 'b', 'c'],help='blah~~~') 
  1. 選擇:A /參數:1

EX)

$ python a.py --opt a param 
  • 選擇:c /參數:2
  • 前)

    $ python a.py --opt b param1 param2 
    
    +0

    這不是一個直接的答案,但如果你打算寫命令行腳本,你應該看看['docopt'](http://docopt.org/)。 –

    +0

    我看到'--opt'標誌(可選參數)的定義,但'-a'或' - a'沒有。 – hpaulj

    +0

    謝謝。我修改了內容。 – lloyd

    回答

    0

    您可以爲每個A,B和C,也可選參數爲您的PARAMS增加更多的參數,一個。通過使用命名參數nargs ='?'您可以指定它們是可選的,並且使用默認值=「某個值」確保它不會出現錯誤。最後,根據選定的選項a,b或c,您將能夠捕捉到您需要的選項。

    這裏有一個簡短的用法例如:

    parser.add_argument('x1', type=float, nargs='?', default=0, help='Circ. 1 X-coord') 
    parser.add_argument('y1', type=float, nargs='?', default=0, help='Circ. 1 Y-coord') 
    parser.add_argument('r1', type=float, nargs='?', default=70, help='Circ. 1 radius') 
    parser.add_argument('x2', type=float, nargs='?', default=-6.57, help='Circ. 2 X-coord') 
    parser.add_argument('y2', type=float, nargs='?', default=7, help='Circ. 2 Y-coord') 
    parser.add_argument('r2', type=float, nargs='?', default=70, help='Circ. 2 radius') 
    args = parser.parse_args() 
    
    circCoverage(args.x1, args.y1, args.r1, args.x2, args.y2, args.r2) 
    

    這裏,如果沒有選擇值,則使用默認的。你可以玩這個來得到你想要的。

    乾杯

    0

    您需要添加sub-commandsArgumentParser.add_subparsers()方法會幫助你

    檢查這個例子

    >>> # create the top-level parser 
    >>> parser = argparse.ArgumentParser(prog='PROG') 
    >>> parser.add_argument('--foo', action='store_true', help='foo help') 
    >>> subparsers = parser.add_subparsers(help='sub-command help') 
    >>> 
    >>> # create the parser for the "a" command 
    >>> parser_a = subparsers.add_parser('a', help='a help') 
    >>> parser_a.add_argument('bar', type=int, help='bar help') 
    >>> 
    >>> # create the parser for the "b" command 
    >>> parser_b = subparsers.add_parser('b', help='b help') 
    >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') 
    >>> 
    >>> # parse some argument lists 
    >>> parser.parse_args(['a', '12']) 
    Namespace(bar=12, foo=False) 
    >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) 
    Namespace(baz='Z', foo=True)