312

Python 2.7 のドキュメントには、さらに別のコマンドライン解析モジュールが含まれていることに気付きました。getoptとに加えて、optparseがありますargparse

さらに別のコマンドライン解析モジュールが作成されたのはなぜですか? の代わりに使用する必要があるのはなぜoptparseですか? 知っておくべき新機能はありますか?

4

5 に答える 5

340

現在、 pythonは非推奨であり、将来的2.7optparseはなくなることを願っています。

argparse元のページ ( https://code.google.com/archive/p/argparse/ )に記載されているすべての理由により優れています。

  • 位置引数の処理
  • サブコマンドのサポート
  • +とのような代替オプション接頭辞を許可する/
  • 0 個以上および 1 個以上のスタイル引数の処理
  • より有益な使用法メッセージの生成
  • カスタムタイプとアクションのためのよりシンプルなインターフェースを提供する

詳細情報はPEP 389にもあります。これはargparse、標準ライブラリに組み込まれた手段です。

于 2010-07-10T03:22:22.177 に答える
67

optparse の代わりにそれを使用する必要があるのはなぜですか? 知っておくべき新機能はありますか?

@Nicholasの答えはこれをうまくカバーしていると思いますが、あなたが始めるより多くの「メタ」質問ではありません:

さらに別のコマンドライン解析モジュールが作成されたのはなぜですか?

有用なモジュールが標準ライブラリに追加された場合、これが一番のジレンマです。同じ種類の機能を提供するための、実質的に優れているが後方互換性がない方法が出現した場合、あなたはどうしますか?

古くて明らかに優れた方法 (通常、複雑なパッケージについて話している場合: asyncore と twisted、tkinter と wx または Qt など) に固執するか、同じことを行う複数の互換性のない方法 (XMLパーサー、IMHOは、コマンドラインパーサーよりもさらに良い例です-しかし、email同様の問題に対処するためのパッケージ対無数の古い方法もそれほど遠くありません;-)。

ドキュメントで古い方法が「非推奨」であるという脅迫的な不平を言うかもしれませんが、(後方互換性を維持する必要がある限り) 大規模で重要なアプリケーションが新しい Python リリースに移行するのを止めずに、それらを取り除くことはできません。

(あなたの質問に直接関係のないジレンマ 2 は、「標準ライブラリは優れたパッケージが死ぬ場所である」という古い格言にまとめられています... 1 年半ほどごとにリリースされ、パッケージはそれほど大きくなく、非常に安定しており、それ以上頻繁にリリースする必要はありませんが、実際には標準ライブラリで「凍結」されることでかなりの被害を受ける可能性があります...しかし、それは実際には別の問題です)。

于 2010-07-10T05:10:55.573 に答える
39

Python の追加の理論的根拠の最良の情報源は、その PEP: PEP 389: argparse - New Command Line Parsing Module、特に、なぜ getopt と optparse が十分でないのかというセクションです。

于 2010-07-10T03:20:46.263 に答える
6

最初、私は @fmark と同じように optparse から argparse に切り替えることに消極的でした。

  1. 差はそれほど大きくないと思いました。
  2. かなりの数の VPS がまだデフォルトで Python 2.6 を提供しています。

次に、このドキュメントを見ました。特に意味のあるヘルプ メッセージの生成について話している場合、argparse は optparse よりも優れています

そして、@Nicholas による「argparse vs. optparse」を見て、argparse を python <2.7 で利用できると言っています (そうです、以前は知りませんでした。)

これで、私の 2 つの懸念事項がうまく解決されました。同じような考え方をしている方の参考になればと思って書きました。

于 2013-04-06T05:59:53.353 に答える