首页 > 解决方案 > Python Click 提示是否有任何预填充选项?

问题描述

我试图允许用户使用 Click 编辑配置文件中的参数。我想要做的是在提示输入中向他们提供预先填写的先前参数,以便他们可以直接编辑它,而不是让他们再次全部输入。例如,如果参数是“test.com”,我希望我的提示呈现如下内容:

Edit Domain Name: testdomain.com

testdomain.com 是可编辑的。然后,当他们添加 1 使其读取 testdomain1.com 时,提示会将 testdomain1.com 返回到代码。10 年前还有几篇其他帖子,其中包含 readline 和其他类似 vanilla-python 的选项,例如herehere,但我无法从 Click 文档中找出任何内容。

有人有想法么?谢谢!

标签: pythonpython-click

解决方案


提示对于编辑文本不是最友好的。
幸运的是,有办法解决这个问题。

举个例子,git commit
如果您未指定--messageor-m选项,则git commit打开一个编辑器供用户输入提交消息。

您可能还需要考虑使用文本编辑器提示您的用户。
您可以通过以下方式实现此目的python-click

import click

def promp_user_with_editor(old_param: str) -> str:
    comment = "# Edit Domain Name:\n"
    editor_content = f"{comment}{old_param}"
    result = click.edit(editor_content)
    # In real code, you would properly handle the user's input here.
    new_param = result.split(comment)[1].strip()
    return new_param

@click.command()
def main():
    new_param = promp_user_with_editor(old_param="testdomain.com")
    click.echo(f"{new_param=}")

if __name__ == "__main__":
    main()

现在将此代码运行为:

python3 the_name_of_the_above_file.py

会提示我:

# Edit Domain Name:
testdomain.com

如果我将其更改为:

# Edit Domain Name:
stackoverflow.com

输出是:

new_param='stackoverflow.com'

推荐阅读