什么是解析可用于发出命令的字符串的健壮方法

时间:2016-09-26 01:10:13

标签: python string command irc

我们所有使用的某些工具通常允许将字符串解析为可选命令。例如,对于大多数IRC工具,可以编写类似/msg <nick> hi there!的内容,从而导致字符串被解析并执行命令。

我在周末考虑这个问题,并意识到我完全不知道如何能够强有力地实现这个功能。我的鸟瞰图对它的理解是每个输入都需要被解析,发现命令的潜在匹配,并且该命令需要在适当的验证下执行。

我在Python中为此写了一个快速的概念证明:

class InputParser:

    def __init__(self):
        self.command_character = '!!'
        self.message = None
        self.command = None
        self.method = None

    def process_message(self, message):
        # every input into the system is sent through here.  If the 
        # start of the string matches the command_character, try and 
        # find the command, otherwise return back the initial
        # message.
        self.message = message

        if self.message.startswith(self.command_character):
            self.command = self.message.split(' ')[0]
            self.method = self.command.replace(self.command_character, '')
            try:
                return self.__class__.__dict__['_%s' % self.method]()
            except KeyError:
                # no matching command found, return the input message 
                return self.message
        return self.message

    def _yell(self):
        # returns an uppercase string
        return self.message.upper().replace(self.command, '')

    def _me(self):
        # returns a string wrapped by * characters
        return ('*%s*' % self.message).replace(self.command, '')

使用示例:

!!yell hello friend&gt; HELLO FRIEND

问题: 有人可以为我提供现有项目,现有库的链接,或者给我一个概念性的概述,以便有效地改变程序解释字符串的方式,从而导致应用程序的不同行为?

1 个答案:

答案 0 :(得分:0)

不要乱砍类内部,最好使用字典将命令字符串映射到执行命令的函数。在类级别设置字典,如果在实例之间可能不同,则在__init__()设置。

这样,字典有两个目的:一个用于提供有效的命令令牌,另一个用于将命令令牌映射到一个操作。