指定输入参数argparse python的格式

Specify format for input arguments argparse python

我有一个需要一些命令行输入的python脚本,我使用argparse来解析它们。我发现文档有点混乱,无法检查输入参数中的格式。我所说的检查格式是指以下示例脚本:

1
2
3
4
parser.add_argument('-s',"--startdate", help="The Start Date - format YYYY-MM-DD", required=True)
parser.add_argument('-e',"--enddate", help="The End Date format YYYY-MM-DD (Inclusive)", required=True)
parser.add_argument('-a',"--accountid", type=int, help='Account ID for the account for which data is required (Default: 570)')
parser.add_argument('-o',"--outputpath", help='Directory where output needs to be stored (Default: ' + os.path.dirname(os.path.abspath(__file__)))

我需要检查选项-s-e,用户输入的格式是YYYY-MM-DD。argparse中是否有一个我不知道是哪个选项实现了这一点?


发送的文档:

The type keyword argument of add_argument() allows any necessary type-checking and type conversions to be performed ... type= can take any callable that takes a single string argument and returns the converted value

你可以做什么样:

1
2
3
4
5
6
def valid_date(s):
    try:
        return datetime.strptime(s,"%Y-%m-%d")
    except ValueError:
        msg ="Not a valid date: '{0}'.".format(s)
        raise argparse.ArgumentTypeError(msg)

然后使用的是AS type

1
2
3
4
5
parser.add_argument("-s",
                   "--startdate",
                    help="The Start Date - format YYYY-MM-DD",
                    required=True,
                    type=valid_date)


只是添加到上面的答案,你可以使用一个lambda函数,如果你想保持一个一个衬垫。例如:

1
parser.add_argument('--date', type=lambda d: datetime.strptime(d, '%Y%m%d'))

老问题不相关的线程,但我至少!


本研究通过打击别人谁的搜索引擎:在Python标准3.7,你可以使用类的方法而不是自然.fromisoformatISO 8601标准的车轮的日期,例如:

1
2
3
4
5
6
7
8
parser.add_argument('-s',"--startdate",
    help="The Start Date - format YYYY-MM-DD",
    required=True,
    type=datetime.date.fromisoformat)
parser.add_argument('-e',"--enddate",
    help="The End Date format YYYY-MM-DD (Inclusive)",
    required=True,
    type=datetime.date.fromisoformat)