python 当使用docopt解析时,如何创建一个存储在数组中的值数目未知的参数

fcwjkofz  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(89)

我希望命令行参数采用数组格式。

myprogram.py -a 1,2,4,5

当用docopt解析参数时,我想看到:

{'a' = [1,2,4,5]}  # the length of this array could be as long as user may like.

我不知道这是否可行。如果不可行,我能做的最好的调整是什么?

nbysray5

nbysray51#

你不会让docopt来做这件事,因为逗号分隔的列表只是一个可选参数,但是你可以很容易地自己做:

"""
Example of program with many options using docopt.

Usage:
  myprogram.py -a NUMBERS

Options:
  -h --help            show this help message and exit
  -a NUMBERS           Comma separated list of numbers
"""

from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__, version='1.0.0rc2')
    args['-a'] = [int(x) for x in args['-a'].split(',')]
    print(args)
jhdbpxl9

jhdbpxl92#

正确答案是使用省略号...
来自docopt文档
...(省略号)一个或多个元素。要指定可以接受任意数量的重复元素,请使用省略号(...),例如my_program.py FILE ...表示接受一个或多个FILE-s。如果要接受零个或多个元素,请使用方括号,例如:my_program.py [FILE ...]。省略号在左边的表达式上用作一元运算符。
使用online parser,您可以看到输出。
给定一个

Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py -h | --help
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.

输入ship new 1 2 3 4将给予以下解析信息

{
  "--help": false, 
  "--version": false, 
  "<name>": [
    "1", 
    "2", 
    "3", 
    "4"
  ], 
  "new": true, 
  "ship": true
}

相关问题