Python 2.7 のドキュメントには、さらに別のコマンドライン解析モジュールが含まれていることに気付きました。getopt
とに加えて、optparse
がありますargparse
。
さらに別のコマンドライン解析モジュールが作成されたのはなぜですか? の代わりに使用する必要があるのはなぜoptparse
ですか? 知っておくべき新機能はありますか?
Python 2.7 のドキュメントには、さらに別のコマンドライン解析モジュールが含まれていることに気付きました。getopt
とに加えて、optparse
がありますargparse
。
さらに別のコマンドライン解析モジュールが作成されたのはなぜですか? の代わりに使用する必要があるのはなぜoptparse
ですか? 知っておくべき新機能はありますか?
現在、 pythonは非推奨であり、将来的2.7
にoptparse
はなくなることを願っています。
argparse
元のページ ( https://code.google.com/archive/p/argparse/ )に記載されているすべての理由により優れています。
+
とのような代替オプション接頭辞を許可する/
詳細情報はPEP 389にもあります。これはargparse
、標準ライブラリに組み込まれた手段です。
optparse の代わりにそれを使用する必要があるのはなぜですか? 知っておくべき新機能はありますか?
@Nicholasの答えはこれをうまくカバーしていると思いますが、あなたが始めるより多くの「メタ」質問ではありません:
さらに別のコマンドライン解析モジュールが作成されたのはなぜですか?
有用なモジュールが標準ライブラリに追加された場合、これが一番のジレンマです。同じ種類の機能を提供するための、実質的に優れているが後方互換性がない方法が出現した場合、あなたはどうしますか?
古くて明らかに優れた方法 (通常、複雑なパッケージについて話している場合: asyncore と twisted、tkinter と wx または Qt など) に固執するか、同じことを行う複数の互換性のない方法 (XMLパーサー、IMHOは、コマンドラインパーサーよりもさらに良い例です-しかし、email
同様の問題に対処するためのパッケージ対無数の古い方法もそれほど遠くありません;-)。
ドキュメントで古い方法が「非推奨」であるという脅迫的な不平を言うかもしれませんが、(後方互換性を維持する必要がある限り) 大規模で重要なアプリケーションが新しい Python リリースに移行するのを止めずに、それらを取り除くことはできません。
(あなたの質問に直接関係のないジレンマ 2 は、「標準ライブラリは優れたパッケージが死ぬ場所である」という古い格言にまとめられています... 1 年半ほどごとにリリースされ、パッケージはそれほど大きくなく、非常に安定しており、それ以上頻繁にリリースする必要はありませんが、実際には標準ライブラリで「凍結」されることでかなりの被害を受ける可能性があります...しかし、それは実際には別の問題です)。
Python の追加の理論的根拠の最良の情報源は、その PEP: PEP 389: argparse - New Command Line Parsing Module、特に、なぜ getopt と optparse が十分でないのかというセクションです。
最初、私は @fmark と同じように optparse から argparse に切り替えることに消極的でした。
次に、このドキュメントを見ました。特に意味のあるヘルプ メッセージの生成について話している場合、argparse は optparse よりも優れています。
そして、@Nicholas による「argparse vs. optparse」を見て、argparse を python <2.7 で利用できると言っています (そうです、以前は知りませんでした。)
これで、私の 2 つの懸念事項がうまく解決されました。同じような考え方をしている方の参考になればと思って書きました。