Python Cmdparser 模块2025年3月17日 | 阅读11分钟 有时,我们必须使用命令提示符终端编写命令,而这个终端用于解释为各种目的编写的内联命令,被称为命令解释器。我们可以编写和构建一个框架,用于编写面向行的命令解释器,为了实现这个任务,有时我们必须使用类。一个为命令解释器提供框架的类,以便我们可以编写面向行的命令,称为 cmd 类。现在,许多人想知道 cmd 类的用途以及它对我们有何帮助。cmd 类对于创建原型、稍后将包装的测试工具以及以更复杂方式呈现的管理工具非常有用。因此,要执行所有这些任务并创建这些工具,我们必须使用命令行界面,这可以使用 cmd 类轻松构建。 命令行解释器的使用已经变得非常罕见,因为现在大多数应用程序中图形用户界面 (GUI) 已经增加。因此,用户更倾向于使用这些应用程序,而不是使用简单的面向行的命令解释器,但使用命令行界面有其自身的优点。 以下是使用命令行界面或解释器的几个优点:
这些是命令行解释器的一些主要优点,这就是为什么即使在今天,大多数用户仍然倾向于它们,而不是许多界面更具吸引力的基于 GUI 的应用程序。在看到这些优点之后,我们可以理解并得出结论,使用 cmd 类构建命令行解释器是多么有用。它不仅对我们的职业生涯和专业任务有帮助,而且对我们的个人项目也有帮助。许多人会惊讶地听到 cmd 类也存在于 Python 包中,因此可以使用 Python 程序创建命令行界面的框架。我们将在 Python 中学习 Cmdparser 模块,其中我们将看到 cmd 类的使用,我们将使用此模块构建命令行解释器的框架。 Python 中的 Cmdparser 模块Cmdparser 模块是一个 Python 包,其中包含两个子模块,它们对于我们编写文本命令解析器和创建命令行界面框架非常有用。Cmdparser 模块还使用其中的 cmd 类和函数,我们将在程序中使用这些函数来构建解析树以执行名称匹配操作。Python 中的 Cmdparser 模块使用 Python 的内置 cmd 模块并调用它来创建命令行界面的框架。 Python 的 Cmdparser 模块包含以下两个子模块或 Python 包:
在本教程中,我们将学习 Cmdparser 包的两个子模块的实现和工作原理,并在 Python 程序中使用它们来创建一个简单的解析树。 Cmdparser 模块:安装如果要在 Python 程序中使用 Cmdparser 模块的函数和子模块,我们应该确保此模块存在于我们的系统中,因为它不是 Python 的内置模块。因此,如果 Cmdparser 模块尚未存在于我们的系统中,我们必须安装它才能进一步实现其子模块。我们可以通过各种安装过程安装 Cmdparser 模块,但在这里我们将使用 pip 安装程序来执行此任务,因为它是最简单直接的方法。 在终端 shell 中输入以下命令,通过 pip 安装程序在我们的系统中安装 Cmdparser 模块: 输入上述命令后,我们必须按回车键并等待一段时间,因为它需要一些时间才能成功安装此模块。 ![]() 如我们所见,Cmdparser 模块现在已成功安装在我们的系统中,现在我们可以通过将其导入程序来使用它及其子模块。我们将首先了解 Cmdparser 包的 cmdparser 子模块的概述和实现,然后我们将了解 datetimeparser 子模块的概述。 Cmdparser 模块:cmdparser 子模块概述Python 的 Cmdparser 包中的 cmdparser 子模块允许我们借助文本命令规范(如下所示)创建解析树结构: 我们可以使用解析树结构检查此特定命令字符串。cmdparser 子模块还允许我们验证部分命令字符串的完成情况,以便将其列入解析树。让我们通过使用上面列出的文本命令规范,从 Python 程序中创建解析树来理解这个概念。 示例:请看下面的 Python 程序,其中我们从 cmdparser 子模块创建了一个解析树,然后将令牌与解析树匹配。 输出 "command invalid somewhere in: 'uvwx'" {'efgh', 'ijkl'} ![]() 说明 我们首先从 cmdparser 包导入 cmdparser 子模块,以便在程序中创建带有令牌的解析树。之后,我们使用 cmdparser 包的 parse_spec() 函数在 parseTree 变量中创建了一个示例解析树。在解析树中,我们只定义了静态令牌,并在之后用于匹配。之后,我们使用 cmdparser 包的 parse_match() 来匹配我们定义的解析树中的令牌。在第二次匹配中,解析树将抛出错误,因为 "uvwx" 不是包中定义的静态令牌。最后,我们使用 parse_completions() 函数完成解析树中剩余的令牌。此函数将在输出中打印解析树中剩余的静态令牌。 现在,正如我们可以在输出中看到的,解析中剩余的静态令牌被打印出来,在此之前,也打印了 "uvwx" 令牌的错误。 我们在上面给出的示例中创建的解析中使用了静态令牌,但我们也可以借助 Cmdparser 模块使用动态令牌创建解析树。在创建包含动态令牌的解析树时,我们可以设置接受字符串列表的动态令牌,并且动态令牌中的字符串列表会随着时间的推移而改变。在处理固定令牌字符串时,我们还可以使用接受任意字符串或字符串列表的动态令牌。如果我们要查看 Cmdparser 模块中所有可用于设置动态令牌的类的规范,我们可以查看模块的 docstrings。在这里,我们将通过使用 Cmdparser 模块类创建带有动态令牌的解析树来理解这一点。请看下面的示例,其中我们使用 Cmdparser 模块中的动态令牌创建了一个解析树。 示例 2:请看下面的 Python 程序,其中我们创建了一个带有动态令牌的解析树,以接受动态字符串列表。 输出 "'all' is not a valid ![]() 说明 从 Cmdparser 模块导入 cmdparser 子模块包后,我们在程序中创建了一个以水果名称作为解析树令牌的类。我们在 'tokenOfFruits' 类中定义的水果名称将作为解析树的静态令牌,并且为了从类中检索水果名称的值,我们在类中定义了一个默认函数。然后,我们定义了另一个函数(myIdentificationFactory),它将在解析树中接受动态令牌,并且它将接受数字值(数字)作为匹配值。为了设置带有数字值的动态令牌,我们使用了 Cmdparser 包中的 IntegerToken() 函数,因此它将使其成为一个动态令牌,它将接受任何整数值作为解析树中的匹配值。之后,我们使用 parse_spec() 函数创建了解析树,其中包含数字和水果作为动态令牌,"keep" 和 "packet" 作为静态令牌。然后,我们使用 check_match() 函数并在其中给出令牌值,以执行解析树中的匹配操作。我们可以在输出中看到,当我们没有提供数字时,它将抛出匹配错误。最后,当我们使用 get_completions() 函数与解析树时,所有用作令牌的水果值都会打印在输出中。 cmdparser 子模块中的类以下是 cmdparser 子包中可用的四个类,它们适合作为基类来创建用户派生令牌(静态和动态):
Cmdparser 模块:datetimeparser 子模块概述Cmdparser 包中的 datetimeparser 子模块在解析树的创建中添加了一些特定的令牌类型,这将有助于解析与日期和时间格式相关的可读规范。在 datetimeparser 子模块中,指定了绝对和相对类型的日期,并且这些类型可以在需要时和适当时转换为其他实例。 以下是 datetimeparser 子模块中日期类型的示例:
datetimeparser 子模块中的类以下是 Cmdparser 模块的 datetimeparser 子包中可用的五个类,它们适合作为基类来创建用户派生令牌(静态和动态):
结论在本教程中,我们学习了 Cmdparser 模块,并了解了如何使用此模块的包创建 cmdparser 接口。我们了解了 Python 中 Cmdparser 包的 cmdparser 和 datetimeparser 子模块,以及它们如何有助于为解析树创建令牌。最后,我们查看了 Cmdparser 包的两个子模块的基类,并了解了这些类如何有助于解析为解析树令牌给定的规范。 下一主题Python Dash 模块 |
我们请求您订阅我们的新闻通讯以获取最新更新。