9

argparseに次のようなフラグを解析する方法はあります[+-]a,b,c,dか?

foo.py +s -b

WindowsやLinuxの場合と同様に、Trueをdestofにs、Falseをdestofに格納する必要があります。battribchmod

現在、私は2つの別々の引数+s-swithstore_truestore_falseをそれぞれ使用しています。しかし、それは各フラグを2回リストするという醜いヘルプを作成します(+ a&-a)

別の回避策は、正規表現を使用して拡張argを手動で解析することです(これはどういうわけかはるかに簡単でカスタム記述を使用しますが、それを行う前に、argparse自体を使用して同じことを実行できるものがあるかどうかを調べたいと思いました。

4

1 に答える 1

6

-sこれを行うには、と+sを1つのadd_argument呼び出しに渡し、カスタムアクションを使用します。

class ToggleAction(argparse.Action):
    def __call__(self, parser, ns, values, option):
        setattr(ns, self.dest, bool("-+".index(option[0])))
ap = ArgumentParser(prefix_chars='-+')
ap.add_argument('-s', '+s', action=ToggleAction, nargs=0)

ap.parse_args(['+s'])
Namespace(s=True)

ap.parse_args(['-s'])
Namespace(s=False)
于 2012-07-16T18:49:58.167 に答える