如何使用 click.prompt 从用户那里获取有效日期?

Ces*_*sco 4 python python-click

你好,

我实际上正在学习如何使用点击包中的一些元素,并且我希望能够使用该prompt命令从用户那里获取有效日期。

我尝试查找文档,并在http://click.pocoo.org/5/prompts/下找到了这个:

要手动请求用户输入,可以使用prompt()函数。默认情况下,它接受任何 Unicode 字符串,但您可以要求任何其他类型。

所以我编写了这段代码并尝试将类 datetime.datetime 作为所需的输入类型传递:

import datetime

value = click.prompt("Enter a date", type=datetime.datetime)
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,会出现提示,但在插入有效日期并按 Enter 键后,我收到此错误消息:

回溯(最近一次调用):文件“”,第 1 行,文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/termui.py”,第 98 行,在提示 result = value_proc(value) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py",第 38 行,在调用 return self.convert (value, param, ctx) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py”,第 87 行,在转换中返回 self.func(value )类型错误:需要一个整数(得到类型 str)

请您告诉我我在这段代码中做错了什么吗?

基本上我想通过编写类似这段(部分虚构的)代码的内容来获得正确格式化的日期值:

import datetime

value = click.prompt("Enter a date", 
                     type=datetime.datetime,
                     format="%d/%m/%Y",
                     default=datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)

非常感谢

J. *_*sen 5

Click 现在似乎不处理日期,但将来可能会发生变化。

相反,您可以传递带有参数的解析器value_proc。我已经使用了dateutil,但datetime如果您愿意,您可以将其更改为:

from dateutil import parser
import click

def parse(value):
    try:
        date = parser.parse(value)
    except:
        raise click.BadParameter("Couldn't understand date.", param=value)
    return value

value = click.prompt("Enter a date", value_proc=parse)
Run Code Online (Sandbox Code Playgroud)