指定input参数argparse python的格式

我有一个python脚本,需要一些命令行input,我使用argparse来parsing它们。 我发现文档有点混乱,找不到在input参数中检查格式的方法。 这个示例脚本解释了我的意思是检查格式:

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用户input的格式是YYYY-MM-DD 。 在argparse中是否有一个选项,我不知道这是否完成了这个。

根据文档 :

add_argument()type关键字参数允许执行任何必要的types检查和types转换… type=可以接受任何可接受的单个string参数并返回转换后的值

你可以做这样的事情:

 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) 

然后使用它作为type

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

只是为了增加上面的答案,如果你想保持一行,你可以使用lambda函数。 例如:

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

老线程,但问题至less对我来说还是相关的!