2

ここに簡単な例があります。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action = 'append_const', dest = 'letter', const = 'a')
parser.add_argument('-b', action = 'append_const', dest = 'letter', const = 'b')
parser.set_defaults(letter = ['a', 'b'])
print(parser.parse_args('-a'.split()))
print(parser.parse_args('-b'.split()))
print(parser.parse_args(''.split()))

結果 :

Namespace(letter=['a', 'b', 'a'])
Namespace(letter=['a', 'b', 'b'])
Namespace(letter=['a', 'b'])

set_defaults 行がない場合、結果は次のようになります。

Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=None)

そのような結果に対して argparse を構成するにはどうすればよいですか?

Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=['a', 'b'])
4

2 に答える 2

1

他の人が述べたように、(@Theodros Zellekeが指摘しているように)正しく解析されないことを除いて、store_const ほとんどあなたが望むことをします。この問題に対処する最も簡単な方法は、が呼び出され-abた後に引数がない場合を単純に処理することだと思います。parse_args

import argparse
import sys

def parse_args(argv = sys.argv[1:]):
    parser = argparse.ArgumentParser()
    parser.add_argument('-a', action = 'append_const', dest = 'letter', const = 'a')
    parser.add_argument('-b', action = 'append_const', dest = 'letter', const = 'b')
    args = parser.parse_args(argv)
    if args.letter is None:
        args.letter = ['a','b']
    return args

print(parse_args('-a'.split()))
print(parse_args('-b'.split()))
print(parse_args('-ab'.split()))
print(parse_args(''.split()))

収量

Namespace(letter=['a'])
Namespace(letter=['b'])
Namespace(letter=['a', 'b'])
Namespace(letter=['a', 'b'])
于 2013-01-01T13:16:17.573 に答える
0

constを追加する代わりに保存し、 action 'store_const'( doc )を使用する必要があります。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action = 'store_const', dest = 'letter', const = 'a')
parser.add_argument('-b', action = 'store_const', dest = 'letter', const = 'b')
parser.set_defaults(letter = ['a', 'b'])
print(parser.parse_args('-a'.split()))
print(parser.parse_args('-b'.split()))
print(parser.parse_args(''.split()))

これにより、次のようになります。

Namespace(letter='a')
Namespace(letter='b')
Namespace(letter=['a', 'b'])
于 2013-01-01T12:43:32.757 に答える