如何在使用cmd
模块实现的面向行的命令解释器中为命令创建别名?
要创建命令,我必须实现do_cmd
方法。但我有长名称的命令(如constraint
),我想为这些命令提供别名(实际上是快捷方式)(如co
)。我怎么能这样做?
我想到的一种可能性是实现do_alias
(如do_co
)方法,并在此方法中调用do_cmd
(do_constraint
)。但这会在CLI的帮助下为我带来新的命令。
还有其他方法可以达到这个目的吗?或者可能有一种隐藏help
输出命令的方法吗?
答案 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的建议调用它们。