指定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对我来说还是相关的!