【问题标题】:Tab autocomplete and simple implementation of subcommands in python cmd module?在 python cmd 模块中选项卡自动完成和子命令的简单实现?
【发布时间】:2014-06-20 21:45:08
【问题描述】:
是否可以在 cmd 模块的 python Cmd 类的子命令中添加选项卡自动完成功能?假设我正在运行我的命令循环,并且我想要一个名为add 的命令,然后我可以在其中选择动物名称,例如add horse 或add elephant。如果可能的话,如何为任何子命令选择自动完成?
我正在为我正在处理的实际项目做的一件事是为不同的模式使用不同的类。如果您键入whitelist,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。然后,您可以键入 exit 以返回主命令循环。这对于更重量级的模式似乎很好,但是创建一个继承 Cmd 的全新类似乎有点像添加不同类型的东西这样简单的事情,比如上面的例子。那么,为Cmd 类添加简单(就代码而言)子命令的最佳方法是什么?谢谢。
【问题讨论】:
标签:
python
command
subcommand
【解决方案1】:
以下作品:
#!/usr/bin/env python
from __future__ import print_function
from cmd import Cmd
import readline # noqa
class Zoo(Cmd):
def __init__(self, animals):
Cmd.__init__(self)
self.animals = animals
def do_add(self, animal):
print("Animal {0:s} added".format(animal))
def completedefault(self, text, line, begidx, endidx):
tokens = line.split()
if tokens[0].strip() == "add":
return self.animal_matches(text)
return []
def animal_matches(self, text):
matches = []
n = len(text)
for word in self.animals:
if word[:n] == text:
matches.append(word)
return matches
animals = ["Bear", "Cat", "Cheetah", "Lion", "Zebra"]
zoo = Zoo(animals)
zoo.cmdloop()