用于构建优秀命令行的 4 个 Python 库

这是我的终端应用程序与伟大的命令行界面系列文章中的两部分。在第一篇中,我讨论了使命令行应用程序成为一种纯粹为个人喜好的功能。在本文中,我将介绍如何在几个库的帮助下,在 Python 中实现这些功能。读完后,读者会了解到如何使用  Prompt ToolkitClick(命令行界面创建工具包)、Pygments 和 Fuzzy Finder 来实现一个易于使用的 REPL。

我计划在不到 20 行的 Python 代码中实现这一点。让我们开始吧。

 加qq群813622576免费领取Python学习资料

Python Prompt 工具

我认为这个库作为命令行应用的瑞士军刀——它扮演了readlinecurses 和其他更多库的角色。让我们从安装这个库开始吧:

我们将从一个简单的 REPL 开始。典型的 REPL 能接收用户的输入,进行一个操作之后再打印结果。我们这里创建一个“echo”的 REPL 。用户输入什么它就打印什么:

REPL

以上便实现了一个 REPL。它可以读取用户的输入并输出用户输入的内容。在这个代码片段中的 prompt 函数来自于 prompt_toolkit 库;它被用来替换 readline 库。

历史

为了增强我们的 REPL,我们可以添加命令历史:

我们刚刚向REPL添加了持久的历史记录。 现在我们可以使用向上/向下箭头浏览历史记录,并使用Ctrl + R搜索历史。 这符合命令行的基本礼仪。

自动联想

我在第一部分中介绍的可发现性技巧之一是自动联想历史命令。(我们看到这个功能在fish shell中开创了。)让我们把这个功能添加到我们的REPL中:

我们需要做的只是在 prompt() API调用中添加一个新的参数。现在我们有了一个具有fish风格历史自动联想的 REPL。

自动补全

现在,让我们通过自动补全功能来实现 Tab 补全,它会在用户输入过程中弹出参考项。

可是 REPL 怎么知道给出哪些参考项呢?我们提供了一个可选条目的字典,用来给出提示。

以 SQL 的自动补全为例,来看看怎么在 REPL 中实现吧。我们可以将 SQL 关键字存储到自动补全字典。具体如下:

和上一节类似,我们简单的使用了 prompt-toolkit 中叫 WordCompleter 的普通补全程序。它会从自动补全字典中匹配用户的输入,并且给出一个可选条目列表。

现在我们的 REPL 实现了自动补全、fish 风格历史自动联想,以及 up/down 键回顾输入历史。所有这些功能的实现只用了不到 10 行代码。

Click

Click是一个命令行创建工具包,可以方便地解析程序的命令行选项和参数。 本节不介绍如何使用Click作为参数解析器; 相反,我将谈一些Click附带的一些实用程序。

click 安装很简单:

Pager

Pager 是能将长输出一次显示在一个页面上的 Pagers Unix 实用程序。它可以通过调节显示较少,更多,最多等。通过 pager 显示命令的输出不仅仅设计友好,而且相得益彰。

我们进一步来看前面的示例,可以用 click.echo_via_pager() 来取代默认的 print() 语句。它会通过 pager 将输出发送到 stdout。这与平台无关,所以可以在 Unix 或 Windows 中工作。 而且 click.echo_via_pager() 还会通过使用合适的默认值以在必要时显示彩色代码:

猜你喜欢

转载自www.cnblogs.com/zxcv1234/p/9747751.html