如何定义argparse默认参数选择和"wildcard",需要验证才能被接受的动态选择?



我目前正在用argparse模块在Python 3中构建一个命令行接口。

我有一种情况,我需要为子分析器的可选argparse参数-s定义选项(例如"today", "yesterday", "week",…(,但也允许使用日期字符串,但前提是它可以成功地解析为具有预定义格式的datetime.datetime(例如"%Y-%m-%d"(,否则异常为raised。

parser.add_argument(
"-s",
"--start-date",
type=str,
default="today",
choices=["today", "yesterday", "week", <date>],  # date should be accepted only if datetime.strptime(date, "%Y-%m-%d") is successful
help="start date help",
)

这有可能吗?

根据我之前的问题,我相信这就足够了,这个自定义函数可以验证您的输入。如果是今天、昨天、星期的基本情况,则返回字符串,否则尝试解析日期对象。

你可以按照自己认为合适的方式进行更改,但这说明了你的需要。

import argparse
def parse_date(s):
if s.lower() in ["today", "yesterday", "week"]:
return s

return datetime.datetime.strptime(s, "%Y-%m-%d")
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument(
"-s",
"--start-date",
type=lambda s: parse_date(s),
default="today",
help="start date help",
)

最新更新