私は明らかに何かを見逃しているに違いありません。目標は、必要な最初のパラメータ、2番目のオプション、および残りの任意の残りのパラメータを指定してargparseを使用することです。Python argparse:オプションのパラメータをnargs = argparse.REMAINDERと組み合わせる
私は2つのテストパーサーを作成しました。それらの間の唯一の違いは、一方でnargs = argparse.REMAINDERを使用し、他方でnargs = '*'を使用することです。
def doParser1(argsin):
parser = argparse.ArgumentParser(description='Parser demo.')
parser.add_argument('req1', help='first required parameter')
parser.add_argument('--opt1', help='first optional parameter')
parser.add_argument('leftovers', nargs=argparse.REMAINDER,
help='all the other parameters')
argsout = parser.parse_args(args=argsin)
print argsout
return argsout
def doParser2(argsin):
parser = argparse.ArgumentParser(description='Parser demo.')
parser.add_argument('req1', help='first required parameter')
parser.add_argument('--opt1', help='first optional parameter')
parser.add_argument('leftovers', nargs='*',
help='all the other parameters')
argsout = parser.parse_args(args=argsin)
print argsout
return argsout
余分なパラメータがない場合、parser2が機能します。これはparser1と、パーサー1に続いて入力されている:
input: ['req1value', '--opt1', 'opt1value']
Namespace(leftovers=['--opt1', 'opt1value'], opt1=None, req1='req1value')
Namespace(leftovers=None, opt1='opt1value', req1='req1value')
余分なパラメータがある場合は、OPT1値がparser1とparser2でミスしただけで混乱します:
input: ['req1value', '--opt1', 'opt1value', 'r1', 'r2']
Namespace(leftovers=['--opt1', 'opt1value', 'r1', 'r2'], opt1=None, req1='req1value')
usage: py-argparse.py [-h] [--opt1 OPT1]
[-leftovers [LEFTOVERS [LEFTOVERS ...]]]
req1
py-argparse.py: error: unrecognized arguments: r1 r2
予想される出力は次のようになります。
Namespace(leftovers=['r1', 'r2'], opt1='opt1value', req1='req1value')
これは単純なケースである必要があります。ここにあるものは、私が本当にやろうとしていることから単純化されているようです。私は残り物をオプションにして、さまざまなオプションを追加しようとしましたが、何もうまくいきません。
ご協力いただければ幸いです。
私はそれが何か単純でなければならないことを知っていました。どこにいてもドキュメントでは見えませんでしたが、nargs = argparse.REMAINDERで動作します。ありがとう。 – OPunWide