0

argparse ライブラリを使用してコマンドを作成する予定です。これが私のコマンド構造です。

$ python cvs.py -d my_adress local diff -r xyz -N -d details

ここで、ローカルには、ローカルコミット、ローカル追加などの複数のコマンドがグループ化されています。たとえば、[-d my_address] はメインで解析され、ローカル差分の後のすべてのスイッチは、ローカル差分に対して実行される関数によって一緒に解析されます。

同様に、ローカルに対応する別のコマンド グループがあります。グローバルと言います。

スイッチ -d は -r と混在していません。そのため、-r を解析するパーサーは -d を認識せず、その逆も同様です。

argparse を使用してこれを実装することは可能ですか? はいの場合、誰かがこれを行うための大まかなアルゴリズムを提案できますか? いいえの場合、Pythonでこれを行う他の方法は何ですか? ありがとう。

4

1 に答える 1

1

nargsパラメータ、つまり'*'オプションを参照してください。サブパースは実行しませんが (argparse がそれを実行できるとはまったく思いません)、少なくともオプションをグループ化するため、個別のオプションとして取得-dおよび-r返されます。 -N既知のオプションではありません。argparse がそれをエラーと見なすか(これは望ましくない)、または-r.

あなたのアプローチは失敗するかもしれません。-dCVS サブコマンドには、-r、 などのあらゆる種類の 1 文字のオプションを含めることができます(長いリストです)。特定の CVS オプションをサブコマンドとしてサポートするか、オプションにその文字を使用するかについて、常に難しい選択をしていることに気付くでしょうcvs.py

いくつかのマークアップを導入して、CVS サブコマンドを分離することができますpython cvs.py -d my_adress local diff § -r xyz -N。ただし、それはcvs -d my_adress local diff; cvs -r xyz -Nもはや本当の改善ではありません。

于 2015-05-19T07:03:12.920 に答える