我使用 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
的单个参数,然后给出一串用逗号分隔的地址,但我宁愿找到解决方案。
有什么建议吗?需要更改任何代码吗?或者只是语法?
这是我的建议
代码就变成:
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