8

My goal is to write a Python command line utility using argparse that has multiple commands that each have different sets of required inputs.

ドキュメント、いくつかの Google 検索、およびスタック オーバーフローを読んでみましたが、何も見つかりませんでした。考えられるいくつかの解決策を思いつくことができますが、それらは見苦しく、ヘルプ ドキュメントと検証を手動で処理する必要があります。私の疑惑は、これはすでに十分に知られている一般的で効果的な解決策に伴う問題であり、それを検索するための適切な用語が不足しているか、投稿されていないわずかなマージンで十分に不明瞭であるということです。多くの場所。

私が今持っている最良のアイデアは、1 つの位置引数を持ち、その入力の値に基づいて、追加の引数のセットに対して何らかの異なる要件を持つことです。多分私は2回解析しますか?

例として、これは同様のケースです。

1 つの位置引数があり、animal

動物のオプションは猫、トカゲ、魚です

猫の場合、引数の爪、ひげ、足が必要です

トカゲの場合、引数 scale_color、favorite_food が必要です

魚の場合、引数 water_type が必要です

型破りな慣習に頼ることなく、異なる動物の値ごとに必要な追加の引数を -h で文書化する必要があります。

主なカテゴリの選択肢ごとにオプションの引数を使用してこれを行うことを検討しました。これは魅力的ではありません。なぜなら、ユーティリティは実際にはこれらの引数の 1 つしか取りたくないからです。これを強制し、文書化するという点で車輪の再発明を避けることができれば、そうしたいと思います。

私は次のようなことができます:

valid_commands = ['a','b','c','d','e','f','g']
parser.add_argument('command', choices = valid_commands)
parser.add_argument('inputs', nargs = '*')

しかし、各コマンドの選択に対する追加引数の入力チェックがうまくいきません。

これが行われる通常の方法はありますか?確かに、いくつかの可能なコマンドと、それぞれに異なる必要な引数を持つユーティリティを作成することはかなり一般的です。手動チェックとヘルプドキュメントを追加することで、必要なもののほとんどを確実に得ることができますが、これはおそらく、最初の試行で正しく理解する価値があるほど何度も行う種類のものです.

読んでくれてありがとう。情報を提供できるかどうか教えてください。

4

1 に答える 1

12

これは、サブパーサーの目的のようですか?

http://docs.python.org/dev/library/argparse.html#argparse.ArgumentParser.add_subparsers

于 2012-12-27T20:46:10.453 に答える