如何定义 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,否则将是 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",
        )

这有可能吗?

根据我之前的问题,我相信这足以满足您的需求,即验证您的输入的自定义函数。如果它是今天、昨天、周的基本情况,你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",
        )