如何定义 argparse 默认参数选择和 "wildcard",需要验证才能接受的动态选择?
How to define argparse default argument choices and "wildcard", dynamic choice that needs be verified to be accepted?
我目前正在使用 argparse
模块在 Python 3 中构建命令行界面。
我有一种情况需要为子解析器的可选 argparse
参数 -s
定义选项(例如 "today", "yesterday", "week"
,...),但也允许日期字符串,但前提是它可以成功解析为具有预定义格式(例如“%Y-%m-%d”)的 datetime.datetime
,否则将是 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",
)
这有可能吗?
根据我之前的问题,我相信这足以满足您的需求,即验证您的输入的自定义函数。如果它是今天、昨天、周的基本情况,你return串起来,否则你尝试解析日期对象。
您可以根据需要进行更改,但这说明了您的需要。
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",
)
我目前正在使用 argparse
模块在 Python 3 中构建命令行界面。
我有一种情况需要为子解析器的可选 argparse
参数 -s
定义选项(例如 "today", "yesterday", "week"
,...),但也允许日期字符串,但前提是它可以成功解析为具有预定义格式(例如“%Y-%m-%d”)的 datetime.datetime
,否则将是 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",
)
这有可能吗?
根据我之前的问题,我相信这足以满足您的需求,即验证您的输入的自定义函数。如果它是今天、昨天、周的基本情况,你return串起来,否则你尝试解析日期对象。
您可以根据需要进行更改,但这说明了您的需要。
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",
)