6.20.5.3 拡張を行う他の理由 optparse

新たな型やアクションの追加は、optparse を拡張しようと考える 大きな、かつ明白な理由です。その他に少なくとも二つの分野がかかわって くると考えています。

一つ目の理由は簡単なものです: OptionParser は必要に応じて、 すなわちコマンドラインにエラーが生じたときはユーザがヘルプを要求 した際に sys.exit() を呼び出して役に立とうとします。 前者の場合、スクリプトをクラッシュさせてトレースバックを出力する 伝統的なやり方は受け入れがたいものです; このような応答を行うと、 ユーザはコマンドラインエラーを起こしたときにスクリプトにバグが あるのだと考えさせてしまいます。後者の場合、一般的にはヘルプを 出力した後に継続する利点はあまりありません。

この動作が目障りなら、 ``修正'' するのはさほど難しいことでは ありません。以下の実装をおこなわねばなりません。

  1. OptionParser をサブクラス化して error() メソッドを上書きします
  2. Option をサブクラス化して take_action() メソッドを上書きします -- アクション "help" の処理を自前で提供し、sys.exit() を呼ばない 用にする必要があるでしょう

もう一つの理由は、より複雑ですが、optparse で実装されている コマンドライン文法をオーバライドするということです。 この場合、オプションに対するアクションと型の機構はすべて捨ておき、 sys.argv を処理するコードを上書きします。 いずれの場合も、OptionParser をサブクラス化する必要があります; どれくらい徹底的に書き換えたいかによって、 parse_args()_process_long_opt()、および _process_short_opts() について、一つからすべてのメソッド を上書きする必要があるでしょう。

これらは両方とも、読者の練習課題として残しておきます。 実は私は両方とも自分では書いたことがありません。というのも、 optparse のデフォルトの (自然な) 動作で十分ハッピーで いられるからです。

Happy hacking、 そしてこの言葉を忘れないでください: ルークよ、source を使え (Use the Source, Luke)。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。