0
私はライブラリを使用していくつかの引数を解析したいと思いますが、引数を指定できる無数の方法の中でいくつかのアクションの中から選択するのが最も簡単な方法です。異なるアクションには、異なる数の引数が必要です。argparseを使用して、実行するアクションを選択して引数を渡す方法はありますか?
import argparse
class MyClass:
def __init__(self, someVar):
self.someVar = someVar
def Action1(self, intToPrint):
print("Print 1: %d - %s"%(self.someVar,intToPrint))
def Action2(self, firstNum, firstString):
print("Print 2: %d - %d %s"%(self.someVar,firstNum, firstString))
def CallAction1(mc, args):
mc.Action1(args.intToPrint)
def CallAction2(mc, args):
mc.Action2(args.firstNum, args.firstString)
def Main():
parser = argparse.ArgumentParser(prog='PythonArgumentParsing.py')
subparsers = parser.add_subparsers(help='commands')
action1Group = subparsers.add_parser('action1', help='action 1 help')
action1Group.add_argument('intToPrint', type=str)
action1Group.set_defaults(func=CallAction1)
action2Group = subparsers.add_parser('action2', help='action 1 help')
action2Group.add_argument('firstNum', type=int)
action2Group.add_argument('firstString', type=str)
action2Group.set_defaults(func=CallAction2)
args = parser.parse_args()
someVar = 12345
mc = MyClass(someVar)
args.func(mc, args)
if __name__ == "__main__":
Main()
...しかし、作成する必要が少し不格好なようです:次は、動作しているよう
> python MyClass.py action1 foo
Action 1: 12345 - foo
> python MyClass.py action2 20 30
Action 2: 12345 - 20 30
:
は、私は次の出力を期待する次の呼び出しを考えますCallActionを使用してパーサから引数を渡します。
これをクリーンアップする方法はありますか?
私はそれを与えましたが、それは私に 'TypeError:Action1()に引数 'intToPrint'の複数の値を与えました。私が呼びたいすべてのメソッドに '** kwargs'を追加する必要があるかどうかは分かりにくいです。 –
Ah、 'mc.Action1'を' MyClass.Action1'に変更してください:-) –