3

小さなスクリプトがあり、値のあるパラメーターと値のないパラメーターを受け入れることができるようにする必要があります。

./cha.py --pretty-xml
./cha.py --pretty-xml=5

私はこれを持っています。

parser.add_argument('--pretty-xml', nargs='?', dest='xml_space', default=4)

しかし、xml_space で --pretty-xml を使用すると、「none」になります。このパラメーターを xml_space に書き込まないと、デフォルト値が格納されます。私は正反対が必要です。

4

2 に答える 2

6

const次のキーワードを使用します。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--pretty-xml", nargs="?", type=int, dest="xml_space", const=4)
print(parser.parse_args([]))
print(parser.parse_args(['--pretty-xml']))
print(parser.parse_args(['--pretty-xml=5']))

結果は

Namespace(xml_space=None)
Namespace(xml_space=4)
Namespace(xml_space=5)
于 2013-04-16T15:42:22.390 に答える
0

パラメーターを省略して、代わりにdefaultカスタムを使用します。Action

class PrettyXMLAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if not values:
            values = 4
        setattr(namespace, self.dest, values)

parser.add_argument('--pretty-xml', nargs='?', type=int, dest='xml_space', action=PrettyXMLAction)

デモ:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--pretty-xml', nargs='?', type=int, dest='xml_space', action=PrettyXMLAction)
PrettyXMLAction(option_strings=['--pretty-xml'], dest='xml_space', nargs='?', const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('--pretty-xml'.split())
Namespace(xml_space=4)
>>> parser.parse_args('--pretty-xml=5'.split())
Namespace(xml_space=5)
>>> parser.parse_args(''.split())
Namespace(xml_space=None)
于 2013-04-15T21:09:10.877 に答える