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__))) |
我需要检查选项
发送的文档:
The
type keyword argument ofadd_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
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,你可以使用类的方法而不是自然
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) |