我目前正在用argparse
模块在Python 3中构建一个命令行接口。
我有一种情况,我需要为子分析器的可选argparse
参数-s
定义选项(例如"today", "yesterday", "week"
,…(,但也允许使用日期字符串,但前提是它可以成功地解析为具有预定义格式的datetime.datetime
(例如"%Y-%m-%d"(,否则异常为raise
d。
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",
)