没有参数的Argparse自定义操作?

2024-10-01 13:36:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Hello


Tags: selfparserhello参数stringdefargparseaction
3条回答

正如mgilson suggestednargs=0所做的那样。既然这是你行动的本质,我就把它放在行动中:

class StartAction(argparse.Action):
    def __init__(self, nargs=0, **kw):
        super().__init__(nargs=nargs, **kw)
    def __call__(self, parser, namespace, values, option_string=None):
        print "Hello"

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

而且,您不必为每个add_argument()调用添加nargs=0所需的行为。如果你有多个参数以相同的方式工作,那就很好了。在

然而,用户仍然可以覆盖nargs=0的默认值,这对于您的用例来说是愚蠢的,如问题中所示。所以我要强制执行:

^{pr2}$

在参考了上面的内容并尝试了不同的方法之后,我编写了这个示例。这是一个实现“Uncount”acount的类,它与“count”操作相反。在

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',
)

示例:

^{pr2}$

尝试将nargs=0添加到您的start.add_argument

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

相关问题 更多 >