cmd
Python 2.6.5のモジュールを使用すると、私にとっては問題なく動作します。これをテストするために使用したサンプルコードは次のとおりです。
import cmd
class MyInterpreter(cmd.Cmd):
def do_level1(self, args):
pass
def do_level2_subcommand_1(self, args):
pass
def do_level2_subcommand_2(self, args):
pass
def do_level3_subcommand_1(self, args):
pass
MyInterpreter().cmdloop()
コマンド ラインに「level2」と入力して Tab キーを押すと、level2_subcommand_
すべての補完提案に共通のプレフィックスであるため、行が に展開されます。何も入力せずにもう一度 Tab を押すと、次の行が正しく表示level2_subcommand_1
され、level2_subcommand_2
. これはあなたが探しているものですか?
サブコマンドの場合の別のバリアントは、それらのサブインタープリターを作成することです。
class SubInterpreter(cmd.Cmd):
prompt = "(level2) "
def do_subcommand_1(self, args):
pass
def do_subcommand_2(self, args):
pass
def do_quit(self, args):
return True
do_EOF = do_quit
class MyInterpreter(cmd.Cmd):
def do_level1(self, args):
pass
def do_level2(self, args):
sub_cmd = SubInterpreter()
sub_cmd.cmdloop()
def do_level3(self, args):
pass
上記のバリアントは、「メイン」インタープリターでlevel1
, level2
andを提供します。メイン インタープリターでlevel3
呼び出すと、サブインタープリターが構築され、そのコマンド ループが呼び出されます。level2
サブインタープリターはメインインタープリターとは異なるプロンプトを表示するため、現在どのインタープリターにいるのかをいつでも確認できます。サブインタープリターはsubcommand_1
、 、subcommand_2
、subcommand_3
およびquit
. quit
メインのインタープリターに戻ります。EOF 文字も同様です。