23.1。 cmd —行指向のコマンドインタープリターのサポート
ソースコード: :source: `Lib / cmd.py`
Cmd クラスは、行指向のコマンドインタープリターを作成するための単純なフレームワークを提供します。 これらは、後でより洗練されたインターフェイスにラップされるテストハーネス、管理ツール、およびプロトタイプに役立つことがよくあります。
- class cmd.Cmd([completekey[, stdin[, stdout]]])
Cmd インスタンスまたはサブクラスインスタンスは、行指向のインタープリターフレームワークです。 Cmd 自体をインスタンス化する正当な理由はありません。 むしろ、 Cmd のメソッドを継承し、アクションメソッドをカプセル化するために、自分で定義したインタープリタークラスのスーパークラスとして役立ちます。
オプションの引数 completekey は、完了キーの readline 名です。 デフォルトは Tab です。 completekey が None でなく、 readline が使用可能な場合、コマンド補完は自動的に行われます。
オプションの引数 stdin および stdout は、Cmdインスタンスまたはサブクラスインスタンスが入力および出力に使用する入力および出力ファイルオブジェクトを指定します。 指定しない場合、デフォルトで sys.stdin および sys.stdout になります。
特定の stdin を使用する場合は、インスタンスの use_rawinput 属性を
False
に設定してください。そうしないと、 stdin は無視されます。バージョン2.3で変更: stdin および stdout パラメーターが追加されました。
23.1.1。 Cmdオブジェクト
Cmd インスタンスには次のメソッドがあります。
- Cmd.cmdloop([intro])
プロンプトを繰り返し発行し、入力を受け入れ、受信した入力から最初のプレフィックスを解析し、アクションメソッドにディスパッチして、行の残りの部分を引数として渡します。
オプションの引数は、最初のプロンプトの前に発行されるバナーまたはイントロ文字列です(これはイントロクラス属性をオーバーライドします)。
readline モジュールがロードされると、入力は自動的に bash のような履歴リスト編集を継承します(例: Control-P は最後のコマンドにスクロールバックし、 Control-N は次のコマンドに進み、 Control-F はカーソルを非破壊的に右に移動します。 Control-B は、カーソルを非破壊的に左に移動します。
入力時のファイルの終わりは、文字列
'EOF'
として返されます。インタプリタインスタンスは、メソッド
do_foo()
がある場合にのみ、コマンド名foo
を認識します。 特別な場合として、文字'?'
で始まる行がメソッドdo_help()
にディスパッチされます。 別の特殊なケースとして、文字'!'
で始まる行がメソッドdo_shell()
にディスパッチされます(そのようなメソッドが定義されている場合)。このメソッドは、 postcmd()メソッドが真の値を返すときに返されます。 postcmd()の stop 引数は、コマンドの対応する
do_*()
メソッドからの戻り値です。完了が有効になっている場合、コマンドの完了は自動的に実行され、コマンドargsの完了は、引数 text 、 line 、 begidx [を指定して
complete_foo()
を呼び出すことによって実行されます。 X190X]、および endidx 。 text は、一致させようとしている文字列プレフィックスです。返されるすべての一致は、それで始まる必要があります。 line は、先頭の空白が削除された現在の入力行です。 begidx と endidx は、プレフィックステキストの開始インデックスと終了インデックスであり、異なる情報を提供するために使用できます。引数がどの位置にあるかに応じて完了します。Cmd のすべてのサブクラスは、事前定義された
do_help()
を継承します。 このメソッドは、引数'bar'
を指定して呼び出され、対応するメソッドhelp_bar()
を呼び出します。それが存在しない場合は、do_bar()
のdocstring(使用可能な場合)を出力します。 引数なしで、do_help()
は、使用可能なすべてのヘルプトピック(つまり、対応するhelp_*()
メソッドを持つすべてのコマンドまたはdocstringを持つコマンド)を一覧表示し、文書化されていないコマンドも一覧表示します。
- Cmd.onecmd(str)
- プロンプトに応答して入力されたかのように引数を解釈します。 これはオーバーライドできますが、通常はオーバーライドする必要はありません。 便利な実行フックについては、 precmd()および postcmd()メソッドを参照してください。 戻り値は、インタプリタによるコマンドの解釈を停止するかどうかを示すフラグです。 コマンド str に
do_*()
メソッドがある場合は、そのメソッドの戻り値が返されます。それ以外の場合は、 default()メソッドからの戻り値が返されます。
- Cmd.emptyline()
- プロンプトに応答して空の行が入力されたときに呼び出されるメソッド。 このメソッドがオーバーライドされない場合、最後に入力された空でないコマンドが繰り返されます。
- Cmd.default(line)
- コマンドプレフィックスが認識されないときに入力行で呼び出されるメソッド。 このメソッドがオーバーライドされていない場合は、エラーメッセージが出力されて返されます。
- Cmd.completedefault(text, line, begidx, endidx)
- コマンド固有の
complete_*()
メソッドが使用できない場合に、入力行を完了するために呼び出されるメソッド。 デフォルトでは、空のリストを返します。
- Cmd.precmd(line)
- コマンドライン line が解釈される直前、ただし入力プロンプトが生成および発行された後に実行されるフックメソッド。 このメソッドは Cmd のスタブです。 サブクラスによってオーバーライドされるために存在します。 戻り値は、 onecmd()メソッドによって実行されるコマンドとして使用されます。 precmd()実装は、コマンドを書き直すか、単に line を変更せずに返す場合があります。
- Cmd.postcmd(stop, line)
- コマンドディスパッチが終了した直後に実行されるフックメソッド。 このメソッドは Cmd のスタブです。 サブクラスによってオーバーライドされるために存在します。 line は実行されたコマンドラインであり、 stop は、 postcmd()の呼び出し後に実行を終了するかどうかを示すフラグです。 これは、 onecmd()メソッドの戻り値になります。 このメソッドの戻り値は、 stop に対応する内部フラグの新しい値として使用されます。 falseを返すと、解釈が続行されます。
- Cmd.postloop()
- cmdloop()が戻ろうとしているときに1回実行されるフックメソッド。 このメソッドは Cmd のスタブです。 サブクラスによってオーバーライドされるために存在します。
Cmd サブクラスのインスタンスには、いくつかのパブリックインスタンス変数があります。
- Cmd.prompt
- 入力を求めるために発行されたプロンプト。
- Cmd.identchars
- コマンドプレフィックスとして受け入れられる文字列。
- Cmd.lastcmd
- 最後に表示された空でないコマンドプレフィックス。
- Cmd.cmdqueue
- キューに入れられた入力行のリスト。 cmdqueueリストは、新しい入力が必要なときに cmdloop()でチェックされます。 空でない場合、その要素は、プロンプトで入力されたかのように順番に処理されます。
- Cmd.intro
- イントロまたはバナーとして発行する文字列。 cmdloop()メソッドに引数を指定することでオーバーライドできます。
- Cmd.doc_header
- ヘルプ出力に文書化されたコマンドのセクションがある場合に発行するヘッダー。
- Cmd.misc_header
- ヘルプ出力にその他のヘルプトピックのセクションがある場合に発行するヘッダー(つまり、対応する
do_*()
メソッドのないhelp_*()
メソッドがあります)。
- Cmd.undoc_header
- ヘルプ出力に文書化されていないコマンドのセクションがある場合に発行するヘッダー(つまり、対応する
help_*()
メソッドのないdo_*()
メソッドがあります)。
- Cmd.ruler
- ヘルプメッセージヘッダーの下に区切り線を描画するために使用される文字。 空の場合、定規の線は描画されません。 デフォルトは
'='
です。
- Cmd.use_rawinput
- デフォルトがtrueのフラグ。 trueの場合、 cmdloop()は raw_input()を使用してプロンプトを表示し、次のコマンドを読み取ります。 falseの場合、
sys.stdout.write()
およびsys.stdin.readline()
が使用されます。 (これは、 readline をインポートすることにより、それをサポートするシステムで、インタープリターが Emacs のような行編集とコマンド履歴キーストロークを自動的にサポートすることを意味します。)