Python optparse では、通常、ユーザーがオプションを複数回指定することを許可し、最後のオプション以外のすべてのオプションを黙って無視します。たとえば、オプションのアクション--foo
がstore
で、オプションのアクション--flag
が store_const
、store_true
またはstore_false
の場合、次のコマンドは同等になります。
my-command --foo=bar --foo=another --flag --foo=last --flag
my-command --flag --foo=last
(更新: argparse はデフォルトで同じことを行います。)
現在、私には多くのオプションがあり、それらのいずれかを複数回指定しても意味がありません。ユーザーが同じオプションを複数回指定した場合、エラーの可能性について警告したいと思います。
複数回指定されたオプションを検出する最もエレガントな方法は何ですか? 同じオプションに、短い形式、長い形式、省略された長い形式を含めることができることに注意してください (したがって、-f
、--foobar
、--foob
および--foo
はすべて同じオプションです)。同じデスティネーションを持つ複数のオプションが同時に指定された場合を検出できればさらに良いでしょう。ユーザーが両方--quiet
を指定した場合に警告を発し、--verbose
両方のオプションが同じデスティネーションに値を格納し、効果的に実行できるようにします。互いにオーバーライドします。
更新: よりユーザーフレンドリーにするために、警告はコマンドラインで使用される正確なオプション名を参照する必要があります。append
の代わりにアクションを使用することstore
は可能ですが、競合を検出した場合、どのオプションがそれを引き起こしたかを判断できません ( -q
and--verbose
または--quiet --quiet
?)。
残念ながら、私は optparse に固執しており、Python 2.6 をサポートする必要があるため、argparse を使用できません。
PSargparseでのみ機能するソリューションを知っている場合は、それも投稿してください。外部依存関係の数を最小限に抑えようとしていますが、Python 2.6 で argparse を使用することはまだオプションです。