Tab python cmd模块中子命令的自动完成和简单实现?
是否可以在Cmd模块的python Cmd类的子命令中添加tab autocomplete?假设我正在运行我的命令循环,我想要一个名为Tab python cmd模块中子命令的自动完成和简单实现?,python,command,subcommand,Python,Command,Subcommand,是否可以在Cmd模块的python Cmd类的子命令中添加tab autocomplete?假设我正在运行我的命令循环,我想要一个名为add的命令,在那里我可以选择一些动物的名字,比如addhorse,或者addelephant。如果可能的话,如何为任何子命令创建选项卡自动完成 我为实际项目所做的一件事是为不同的模式使用不同的类。如果键入白名单,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。然后可以键入exit返回主命令循环。这对于更重的模式来说似乎很好,但是创建一个全新的类inh
add
的命令,在那里我可以选择一些动物的名字,比如addhorse
,或者addelephant
。如果可能的话,如何为任何子命令创建选项卡自动完成
我为实际项目所做的一件事是为不同的模式使用不同的类。如果键入白名单
,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。然后可以键入exit返回主命令循环。这对于更重的模式来说似乎很好,但是创建一个全新的类inheritsCmd
对于添加不同类型的东西(如上面的示例)来说似乎有点简单。那么,为Cmd
类添加简单(就代码而言)子命令的最佳方法是什么?谢谢。以下工作:
#!/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()