15
class StartAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        print "Hello"

start.add_argument('-s', '--start', action=StartAction)

通常、アクションを「store_true」のようなものにすると、引数が不要になることはわかっていますが、カスタムアクションを使用して引数を渡す必要がない方法はありますか?

だから私が欲しいのは:

python example.py -s

こんにちは

4

4 に答える 4

20

あなたに追加nargs=0してみてくださいstart.add_argument

start.add_argument('-s', '--start', action=StartAction, nargs=0)
于 2012-06-12T17:55:07.610 に答える
1

上記を参考にして、さまざまな方法を試した後、この例を書きました。これは、「count」アクションの反対である「Uncount」acount を実装するクラスです。

import argparse
class Uncount(argparse.Action):
    def __init__(self, option_strings, dest, nargs=0, choices=None, const=None, **kwargs):
        if nargs != 0:
            raise ValueError("no arguments to this parameter are allowed")
        if const is not None:
            raise ValueError("this parameter does not permit constants")
        if choices is not None:
            raise ValueError("no choices to this parameter are allowed")
        super(Uncount, self).__init__(option_strings=option_strings, nargs=nargs, dest=dest,**kwargs)
    def __call__(self, parser, namespace, values, option_string=None):
        value = getattr(namespace, self.dest, 0)
        setattr(namespace, self.dest, value-1)

opts={}
argparser = argparse.ArgumentParser(description='Report on other teams')
argparser.add_argument(
    '-v','--verbose',dest='verbose',default=0,action='count',
    help='increase log level',
)
argparser.add_argument(
    '-q','--quiet',dest='verbose',default=0,action=Uncount,
    help='increase log level',
)

例:

>>> argparser.parse_args('-q -q'.split())
Namespace(verbose=-2)
>>> argparser.parse_args('-q -v'.split())
Namespace(verbose=0)
>>> argparser.parse_args('-q -v -v'.split())
Namespace(verbose=1)
于 2018-10-28T13:59:44.240 に答える