如何在使用该cmd模块实现的面向行的命令解释器中为命令创建别名?
要创建命令,我必须实现该do_cmd方法.但我有长名称的命令(比如constraint),我想为这些命令提供别名(实际上是快捷方式)(比如co).我怎样才能做到这一点?
我想到的一种可能性是实现do_alias(like do_co)方法并在此方法中调用do_cmd(do_constraint).但是这在CLI的帮助下给我带来了新的命令.
有没有其他方法来实现这一目标?或者可能有一种方法从help输出中隐藏命令?
您可以覆盖该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)
Run Code Online (Sandbox Code Playgroud)
小智 5
以下解决方案使别名命令共享一条帮助消息。它使您可以将所有别名保留在一个易于编辑的位置,同时使文档更加容易。它对照具有函数值的别名字典检查用户输入,并覆盖default()(请参见sloth&brian)和do_help()方法。
在这里,我做了别名,'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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2098 次 |
| 最近记录: |