使用Python cmd模块的命令的别名

时间:2012-10-16 09:16:07

标签: python python-3.x

如何在使用cmd模块实现的面向行的命令解释器中为命令创建别名?

要创建命令,我必须实现do_cmd方法。但我有长名称的命令(如constraint),我想为这些命令提供别名(实际上是快捷方式)(如co)。我怎么能这样做?

我想到的一种可能性是实现do_alias(如do_co)方法,并在此方法中调用do_cmddo_constraint)。但这会在CLI的帮助下为我带来新的命令。

还有其他方法可以达到这个目的吗?或者可能有一种隐藏help输出命令的方法吗?

3 个答案:

答案 0 :(得分:5)

您可以覆盖default方法并搜索合适的命令处理程序(如Brian已建议的那样):

import cmd

class WithAliasCmd(cmd.Cmd):

    def default(self, line):
        cmd, arg, line = self.parseline(line)
        func = [getattr(self, n) for n in self.get_names() if n.startswith('do_' + cmd)]
        if func: # maybe check if exactly one or more elements, and tell the user
            func[0](arg)

答案 1 :(得分:4)

以下解决方案使别名命令共享一条帮助消息。它允许您将所有别名保存在一个易于编辑的位置,同时使文档更容易。它会根据别名dictionary with function values检查用户输入,并覆盖do_help()请参阅sloth& brian )和'c'方法。

此处我已将别名'con'do_constraint()执行'q'do_quit()调用'h'do_help()调用'h q' }。此解决方案的好处是'help quit'import cmd class prompt(cmd.Cmd): def __init__(self): cmd.Cmd.__init__(self) self.aliases = { 'c' : self.do_constraint , 'con' : self.do_constraint , 'q' : self.do_quit , 'h' : self.do_help } def do_constraint(self, arg): '''Constrain things.''' print('Constraint complete.') def do_quit(self, arg): '''Exit the program.''' return True def do_help(self, arg): '''List available commands.''' if arg in self.aliases: arg = self.aliases[arg].__name__[3:] cmd.Cmd.do_help(self, arg) def default(self, line): cmd, arg, line = self.parseline(line) if cmd in self.aliases: self.aliases[cmd](arg) else: print("*** Unknown syntax: %s" % line) 打印相同的消息。多个别名命令的文档可以保存在单个文档字符串中。

if ($_SERVER['HTTP_HOST'] == 'localhost') {
    $array_uri = explode('/', $_SERVER['REQUEST_URI']);
    array_shift($array_uri);
    $uri = $array_uri;
} else {
    $uri = explode('/', $_SERVER['REQUEST_URI']);
}

答案 2 :(得分:1)

文档提到了一个默认方法,您可以覆盖该方法来处理任何未知命令。将其编码为前缀扫描命令列表并按照您对do_alias的建议调用它们。