26

argparseの動作に気づき、戸惑いました(これまで、ファイルのダムリストに使用したことはなかったと思います)。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('multi', action='append', nargs='+')
print(parser.parse_args())

これにより、次の出力が得られます。

~$ ./testargs.py foo bar baz
Namespace(multi=[['foo', 'bar', 'baz']])
~$ 

私は、リスト内のリストではなく、であると期待multiしていました。['foo', 'bar', 'baz']現状では、処理する前につかむ必要がありますargs.multi[0]。これは大したことではありませんが、醜い疣贅のように感じます。なぜそこにあるのかを理解したいと思います。

私は愚かなことをしているのですかadd_argument、それともこれは避けられない癖ですか?

4

1 に答える 1

34

あなたが呼んでいます

parser.add_argument('multi', action='append', nargs='+')

そして、すべての引数を取得し、マルチ リストの単一のアイテムとして追加します。

個別のアイテムとして使用する場合は、append を使用しないでください。

parser.add_argument('multi', nargs='+')

ドキュメントから

'append' - リストを格納し、各引数値をリストに追加します。これは、オプションを複数回指定できるようにするのに便利です。使用例:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
于 2011-03-03T05:10:48.863 に答える