为一个参数指定多个值 Python Argparser

问题描述 投票:0回答:1

我使用 python 的

argparse
为我的应用程序构建了一个工作 CLI。它叫做
comicbot
,它会发送包含漫画的电子邮件。
bulk
子解析器允许指定一定数量的漫画。

usage: comicbot bulk [-h] [-e END | -c COUNT] email [email ...] comic start

positional arguments:
  email                 recipient email addresses
  comic                 comic on gocomics [calvin-and-hobbes]
  start                 date of first strip [YYYY-MM-DD]

options:
  -h, --help            show this help message and exit
  -e END, --end END     date of last strip [YYYY-MM-DD]
  -c COUNT, --count COUNT
                        number of comics to include

我有三个位置参数:

email
comic
date
。我的问题是
email
接受一个或多个值。我如何指定这些值属于
email
,而不是第二个填充
comic
槽,第三个填充
date

我尝试过以下方法。

python -m comicbot bulk [email protected] [email protected] calvin-and-hobbes 1995-06-06 -c 5
# interprets [email protected] as comic
python -m comicbot bulk {[email protected], [email protected]} calvin-and-hobbes 1995-06-06 -c 5
# interprets email as '{[email protected], [email protected]}'

方括号的行为与 {} 相同,并且 () 从终端抛出错误。

我可以更改程序的结构,只接受

email
的单个参数,然后给出一串用逗号分隔的地址,但我宁愿找到解决方案。

有什么建议吗?需要更改任何代码吗?或者只是语法?

python syntax command-line-interface argparse
1个回答
0
投票

这是我的建议

  1. 将电子邮件移至最后位置
  2. 比起 start,我更喜欢 --start,这样和 --end 配合得很好

代码就变成:

parser = argparse.ArgumentParser()
parser.add_argument(
    "-s", "--start", required=True, help="date of first strip [YYYY-MM-DD]"
)
parser.add_argument("-e", "--end", help="date of last strip [YYYY-MM-DD]")
parser.add_argument("-c", "--count", default=1, help="number of comics to include")
parser.add_argument("comic", help="comic on gocomics [calvin-and-hobbes]")
parser.add_argument("email", nargs="+", help="recipient email addresses")

帮助输出:

usage: my.py [-h] -s START [-e END] [-c COUNT] comic email [email ...]

positional arguments:
  comic                 comic on gocomics [calvin-and-hobbes]
  email                 recipient email addresses

options:
  -h, --help            show this help message and exit
  -s START, --start START
                        date of first strip [YYYY-MM-DD]
  -e END, --end END     date of last strip [YYYY-MM-DD]
  -c COUNT, --count COUNT
                        number of comics to include
© www.soinside.com 2019 - 2024. All rights reserved.