0

私は argparse にこの小さな問題があります:

#!/usr/bin/python2.6
#test.py
import argparse

parser = argparse.ArgumentParser(description="test")
parser.add_argument('c', nargs='*')
parser.add_argument('cj', nargs='*')

results = vars(parser.parse_args())
print results

コマンドラインに「test.py c 1」と入力すると、

これを返します

{'cj': [], 'c': ['c', '1']}

しかし、「test.py cj 1」と入力すると

これを返します:

{'cj': [], 'c': ['cj', '1']}

2 番目の例では「cj」キーで値が返されることを期待していますが、「c」キーに引き続き表示されます。

私は何を間違っていますか?

乾杯、

4

2 に答える 2

1

あなたの問題は、*がその後に続くすべてのものと一致することです。c引数には最初の があるため、*渡されるものはすべて になりcます。

cj単一のアイテムと単一のアイテムを保存する場合は、次のようにcします。

parser = argparse.ArgumentParser(description="test")
parser.add_argument('c', nargs='+')
parser.add_argument('cj', nargs='+')

あなたが望むものが:

{'cj': ['1'], 'c': ['cj']}

これは、 が+単一の引数に一致するためです。

于 2012-10-30T01:08:38.110 に答える
0

少なくとも 2 つの問題があります。

  • 位置引数を使用しますが ('-' または '--' で始まらない)、コマンド ラインでそれらの名前を指定します。
  • 使用nargs='*'できるすべての引数を消費する
于 2012-10-30T01:08:55.007 に答える