Skip to main content

A command parser which breaks down a "command" into name, params, short & long options

Project description

LSparser

一个基于Python的指令解析器(大概)

解析一定格式的指令,形如:

    .cmd param1 param2 -s1 -s2 s2val --l lval1 lval2 lval3

得到

    type: "."
    command: "cmd"
    params: ["param1", "param2"]
    s1: True
    s2: "s2val"
    l: ["lval1", "lval2", "lval3"]

指令格式

  • type/指令前缀:一个字符,用于分辩文本是否为指令

    默认地,commandPrefix=[".","。","-","!","!","/"]

  • command/指令名:指令名称

  • params/参数:提供给指令的参数

  • short option/短选项:默认以"-"为前缀的选项,可以有至多一个选项值

  • long option/长选项:默认以"--"为前缀的选项,可以有多个选项值

一些规则:

  • 指令名、参数、选项、选项值之间通过" "分隔
  • 需要事先设定哪些选项可被解析,以及这些选项后是否有选项值
  • 没有附带选项值但出现在指令中的选项,其选项值当做True处理

使用方法

引入库

    from LSparser import *

创建指令模板,提供帮助文本,并设定要被解析的选项

    c=Command("cmd")
    c.help("这是名为cmd的指令")
    c.opt("-s1",2,"短选项s1").opt("-s2",1,"s2").opt("--l",1,"还有长选项l")

可以为指令添加别名、指令前缀

    c.names("cmd1")
    c.types("$","¥")

添加回调函数

    def cmdfunc(cp):
        #cp为CommandParser对象
        print(cp.command) #解析结果以字典的形式存储
        return "随便返回些什么"
    c.callback(cmdfunc)

另一种添加回调函数的方法

    @cmdCallback("cmd")
    def cmdfunc1(cp):
        #另一个回调函数
        return "随便返回些什么"

解析指令

    cmd=".cmd param1 param2 -s1 -s2 s2val --l lval1 lval2 lval3"
    cp=CommandParser()
    result=cp.tryParse(cmd) #result为各回调函数执行结果的列表

进阶地,指令解析后的复杂情况

    if result:
        #解析成功,执行了回调函数,返回了函数结果
        pass
    elif cp.isCommand():
        #至少是指令
        if cp.isDefinedCommand():
            #用指令模板定义过
            if cp.isWrongType():
                #但是指令前缀和定义时不匹配
                #可以在这里处理错误
                pass
            else:
                #仅仅是没有回调函数可以执行
                #可以在这里处理指令
                pass
        else:
            #是未用指令模板定义的指令
            if cp['command']=="test": #判断指令名
                cp.opt("-ts1",1).opt("-opt",0).opt(["-j","--j"],2).parse()
                #根据指令名设定选项,再次解析
                #可以在这里处理指令
    else:
        #根本不是指令
        pass

额外功能,比较文本和各指令的相似度

    similist=cp.core.getCmdSimilarity("zmd",top=5)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

LSparser-0.0.1.tar.gz (11.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page