2

cmdモジュールのpython Cmdクラスのサブコマンドにタブオートコンプリートを追加することは可能ですか? コマンド ループを実行していて、 というコマンドが必要だとします。ここで、 やaddなどの動物名を選択できます。可能であれば、サブコマンドのタブオートコンプリートをどのように行うことができますか?add horseadd elephant

私が取り組んでいる実際のプロジェクトで行っていることの 1 つは、さまざまなモードにさまざまなクラスを使用することです。と入力whitelistすると、そのクラスで別のコマンド ループが実行され、「ホワイトリスト」モードになります。その後、exit と入力して、メイン コマンド ループに戻ることができます。これは、より重いモードには適しているように思えますが、継承するまったく新しいクラスを作成することCmdは、上記の例のようにさまざまなタイプのものを追加するのと同じくらい簡単なことのように思えます。Cmdでは、タブで補完できるクラスに単純な (コードの観点から) サブコマンドを追加する最良の方法は何ですか? ありがとう。

4

1 に答える 1

3

以下の作品:

#!/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()
于 2014-06-20T23:10:17.110 に答える