ドキュメントが示唆するように:
argparse.REMAINDER. 残りのすべてのコマンドライン引数がリストにまとめられます。これは、他のコマンド ライン ユーティリティにディスパッチするコマンド ライン ユーティリティに一般的に役立ちます。
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo')
>>> parser.add_argument('command')
>>> parser.add_argument('args', nargs=argparse.REMAINDER)
>>> print parser.parse_args('--foo B cmd --arg1 XX ZZ'.split())
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
これをまったく同じ目的で使用しようとしましたが、状況によってはバグがあるように見えます(または、概念が間違っている可能性があります)。
import argparse
a = argparse.ArgumentParser()
a.add_argument('-qa', nargs='?')
a.add_argument('-qb', nargs='?')
a.add_argument('rest', nargs=argparse.REMAINDER)
a.parse_args('-qa test ./otherutil bar -q atr'.split())
結果:
test.py: error: ambiguous option: -q could match -qa, -qb
明らかに、 にotherutil
与えられた引数と何らかの形で「衝突」するような引数がある場合、argparse
正しく動作しないようです。
argparse
ある種の引数に達するとREMAINDER
、それ以上の解析を行わずに、リストの最後にあるすべての文字列を使い果たすだけだと思います。どうにかしてこの効果を達成できますか?