私はscript.py
に次のコードを持っている:argparseにどのようにデフォルトサブパーザを選択させるのですか?
import argparse
parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='command')
sp.default = 'a'
a_parser = sp.add_parser('a')
b_parser = sp.add_parser('b')
a_parser.add_argument('--thing', default='thing')
b_parser.add_argument('--nothing', default='nothing')
args = parser.parse_args()
print(args)
私はこの3つの異なる方法を呼び出すことができます:私はをしたいする場合、私はゼロを提供することを示します。これで一つだけ問題があります
$ python3 script.py
Namespace(command='a')
$ python3 script.py a
Namespace(command='a', thing='thing')
$ python3 script.py b
Namespace(command='b', nothing='nothing')
をコマンドラインの引数は、a_parser
が解析や処理を終了するものになります。明らかにそうではありません。sp.default
はちょうどcommand='a'
に設定されていますが、私が期待するものではありません。「ああ、ユーザーはコマンドラインで引数を提供しませんでしたが、これはa_parser
で処理する必要があります。 Namespace(command='a', thing='thing')
! "
私は方法がありますか?これはargparseで行いますか?私はいくつかのオプションを探しましたが、それらのどれも私が何をしているのかは実際には分からないようです。私は、3つの異なるArgumentParserを作成し、それぞれに引数を渡すことでいくつかのジグザグを行うことができると思いますが、それはちょっとグロスです。
もっと良いオプションはありますか?
[cliff](https://pypi.python.org/pypi/cliff)や[click](http://click.pocoo.org/5/)のようなコマンドラインフレームワークを調べると、この種のデザインのサポート。 – larsks
docoptをよく使う – Nickpick