热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python中的Cmdparse模块

Python中的Cmdparse模块原文:https://

Python 中的 Cmdparse 模块

原文:https://www.geeksforgeeks.org/cmdparse-module-in-python/

为编写面向行的命令解释器提供简单框架的类称为 cmd 类。这些通常对管理工具、原型和测试工具很有用,这些工具稍后将被包装在更复杂的界面中。命令行界面可以使用 cmd 模块轻松实现。

如今图形用户界面被大量使用,以至于命令行解释器似乎已经过时了。命令行界面有几个优点:


  • 命令行界面是可移植的,可以在任何地方运行。

  • 中央处理器和内存资源远比图形用户界面便宜。

  • 用命令行打开文件比进入驱动程序和搜索菜单更容易。

  • 创建面向文本的文档要快得多。


Cmd 类

该模块只定义了一个类:Cmd 类。命令行解释器是通过对cmd.Cmd类进行子类化来创建的。Cmd 实例或子类实例可以被视为面向行的解释器框架。


  • 创建命令:在解释器提示符下输入的一行文本的第一部分是命令。identchars 成员中包含的最长字符串是 Command。
    非重音字母、数字和下划线符号是默认识别字符。行尾是命令的参数。

  • 参数:只需do_xxx方法多取一个参数,对应用户在命令名称后输入的字符串部分。

  • 错误:解释器使用以下格式发出错误信号:

    py
    *** :


  • Return Value: In the most common case: commands shouldn’t return a value. When you want to exit the interpreter loop any command that returns a true value stops the interpreter is an exception.

    示例:

    py
    def add(self, d):
        k = d.split()
        if len(k)!= 2:
           print "*** invalid number of arguments"
           return
        try:
           k = [int(i) for i in k]
        except ValueError:
           print "*** arguments should be numbers"
           return
        print k[0]+k[1]



Cmdparse 模块

cmdparser 包包含两个用于编写文本命令解析器的模块。
这个模块特别使用了内置的 Python cmd 模块。该软件包由两个模块组成:


  • cmdparser.cmdparser

  • cmdparser.datetimeparse


装置

我们可以从 PyPI 安装 cmdparse 包。例如

pip install cmdparse


cmdparse 概述

Cmd 模块允许从文本命令规范创建解析树,如下所示

chips( spam | ham [eggs] | beans [eggs [...]] )

可以使用这些解析树来检查特定的命令字符串。此外,它允许列出部分命令字符串的有效完成。

示例:

from cmdparser import cmdparser
parse_tree = cmdparser.parse_spec("abc (def|ghi) [mno]")
# Returns None to indicate
# successful parse
parse_tree.check_match(("abc", "def", "anything"))
# Returns an appropriate 
# parsing error message
parse_tree.check_match(("abc", "ghi", "anything", "pqr"))
# Returns the list ["def", "ghi"]
parse_tree.get_completions(("abc", ))

输出:

python-cmdparse-1

可以设置动态令牌,其中接受的字符串列表可以随时间变化,或者在处理固定令牌字符串时可以接受任意字符串或字符串列表。查看模块的文档字符串,了解可用类的细节,例如:

from cmdparser import cmdparser
class fruitToken(cmdparser.Token):
    def get_values(self, context):
        # Static list here, but could
        # easily be dynamic
        return ["rasberry", "orange", "mango",
                "grapes", "apple", "banana"]
def my_ident_factory(token):
    if token == "number":
        return cmdparser.IntegerToken(token)
    elif token == "fruit":
        return fruitToken(token)
    return None
parse_tree = cmdparser.parse_tree("take bags",
                                  ident_factory = my_ident_factory)
# Returns None to indicate successful
# parse, and the "cmd_fields" dict will
# be initialised as:
# { "take": ["take"], "": ["23"],
#   "": ["apple"], "bags": ["bags"] }
cmd_fields = {}
parse_tree.check_match(("take", "23",
                        "apple", "bags"), 
                       fields = cmd_fields)
# Returns an appropriate 
# parsing error message
parse_tree.check_match(("take", "all", 
                        "rasberry", "bags"))
# Returns the list ["rasberry",
# "orange", "mango", ..., "banana"]
parse_tree.get_completions(("take", "5"))

输出:

python-cmdparser-2

有四个类是适用于用户派生令牌的基类:


  • 令牌:当其中一组固定值合适时,这是有用的,其中列表可以是固定的或动态的。应该重写get_values()方法,以字符串形式返回有效令牌列表。

  • Anytoken: 它类似于 token,但任何字符串都是可以预期的。可以通过validate()方法进行验证,但是validate()方法不允许制表符结束,因为它只在整个命令被解析后被调用。如果需要,还有一种convert()方法

  • AnyTokenString: 类似于 AnyToken,但是命令行上的所有剩余项目都会被消耗掉。

  • Subtree: It matches the entire command subtree and stores the result against the specified token in the fields dictionary. The command specification string should be passed to the constructor, and type classes will override the convert() method and interpret the command in some way (although this is strictly optional).

    装饰器用于从cmd.Cmd派生的命令处理程序,它允许从文档字符串帮助文本中自动提取命令字符串,并允许将命令解析和完成添加到类的命令处理方法中。
    实现了 do_XXX()形式的各种方法来实现 cmd。Cmd 类。

    ```py
    from cmdparser import cmdparser

    @cmdparser.CmdClassDecorator()
    class CommandHandler(cmd.Cmd):

    @cmdparser.CmdMethodDecorator():
        def do_command(self, args, fields):
            """command ( add | delete )

    The example explains the use of 
            command to demonstrate use of the cmd
            decorators.
            """

    # Method body - it will only be called 
            # if a command parses successfully according
            # to the specification above.
    ```

    日期时间地址概述

    Datetimeparse 模块添加了特定的令牌类型来解析人类可读的日期和时间规范。指定了绝对和相对两种类型的日期,并根据需要将其转换为其他实例。
    一些例子是

    ```py
    1:35 on friday last week
    11 feb 2019

    ```

    当前定义的类有:


    • DateSubtree: 包括文字日期(2020-03-14)、与当天相关的星期几(上周周六)、描述性版本(2019 年 6 月 26 日),以及昨天、今天和明天以及解析日历日期。返回值为datetime.date实例。

    • 时间树:12 或 24 小时格式的时间由时间树解析。返回值如time.localtime()返回。

    • RelativeTimeSubtree: 返回值是cmdparser.DateDelta的一个实例,它是一个包含datetime.timedelta的包装类。它解析表示当前时间偏移的短语,例如 3 天和 2 小时前。

    • DateTimeSubstree:datetime.datetime实例是返回值。分析日期和时间的规范,接受日期子树和时间子树短语的组合,或者接受相对时间子树短语;在后一种情况下,时间是相对于当前时间而言的。

    • class calendarperiodsubtree:解析过去日历期间的规范。返回值是表示指定日期范围的 2 元组datetime.date实例,其中第一个日期包含在内,第二个包含在外。




推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
mindylee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有