python prompt-toolkit 简单输入着色

python propmpt-toolkit simple input coloring

我正在尝试为终端中 运行 的某些数据库条目编写控制台应用程序。在考虑了几个 CLI 库之后,我选择了最接近我需要的 prompt-toolkit(cli 框架过于集中于命令行工具)。 Prompt-toolkit 文档比较大,但在很多情况下无法记录简单的用例并快速跳转到高级主题。

考虑以下代码:

from prompt_toolkit import prompt, PromptSession, print_formatted_text, HTML
pts = PromptSession()
result = pts.prompt(HTML('<b>Enter some data > </b>'))

当运行这表明:

输入一些数据>用户类型在这里输入

您可能会注意到提示是 'bold'(使用 HTML 着色提示几乎没有记录,但我认为它有效)。我没有弄清楚的是用户输入部分的着色 - 换句话说,我想在不使用某些词法分析器方法的情况下以某种简单的方式(某种颜色或效果使用户输入脱颖而出)为“此处输入的用户类型”着色(有大量记录)因为我没有输入某种代码,而是输入了一些简单的数据。

有人提到可以为此使用 style= 参数,但是当我尝试输入 'format string' 时出现错误(代码是这样的):

result = pts.prompt(HTML('<b>Enter some data > </b>'), style="fg:ansiyellow bg:black bold underline")

根据 https://python-prompt-toolkit.readthedocs.io/en/stable/pages/advanced_topics/styling.html#styling 这应该是可接受的输入样式(据我所知)。

有什么地方可以看的提示吗?

我个人在我的代码中使用了类似下面的东西。虽然它有点老套,但 style= 应用于整个提示,因此需要使用 HTML 格式化字符串来覆盖它。

prompt(HTML("<ansigray>Please enter text: </ansigray>"), style=Style.from_dict({'': 'ansired'}))

这将生成如下输出:

Please enter text: Hello

其中,“请输入文本”将采用 ansigray(默认终端文本颜色),而“Hello”(用户输入)将为红色

关于 style= 参数,需要将其实例化为带有规则字典的 Style 对象。

我发现这里的示例非常方便: https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/examples/prompts/colored-prompt.py

文档也是如此,其中有各种示例(尽管不是针对这个确切的场景):https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#colors

最后,ansi 颜色和样式规则记录在此处:https://python-prompt-toolkit.readthedocs.io/en/master/pages/advanced_topics/styling.html