nargs=0
mgilson suggested通り。
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
のデフォルトを上書きすることができます。だから私はそれを実施するだろう:
class StartAction(argparse.Action):
def __init__(self, nargs=0, **kw):
if nargs != 0:
raise ValueError('nargs for StartAction must be 0; it is '
'just a flag.')
super().__init__(nargs=nargs, **kw)
def __call__(self, parser, namespace, values, option_string=None):
print "Hello"
出典
2016-06-03 12:13:39
cfi
ValueError:ストアアクションのnargsは> 0でなければならない。何も保存する必要がない場合は、trueを格納するかconstを格納するなどの処理が適切です。 – Lucina
@Lucinaコメントに同意しません。パースの引数と複雑なアクションをシームレスにマッピングするカスタムアクションを呼び出すことができます。 CLIのパラメータとして動作するActionオブジェクトを持つことを前提としているため、CLIのインタフェースとそれを処理するオブジェクトの間に多相性があります。 – Daniel