いくつかの異なるコマンドをサポートする比較的単純な Python スクリプトを作成しています。さまざまなコマンドがさまざまなオプションをサポートしており、argparse によって解析されたオプションを、指定されたコマンドの正しいメソッドに渡すことができるようにしたいと考えています。
使用文字列は次のようになります。
usage: script.py [-h]
{a, b, c}
...
script.py: error: too few arguments
適切なメソッドを簡単に呼び出すことができます。
def a():
...
def b():
...
def c():
...
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.set_defaults(method = a)
...
arguments = parser.parse_args()
arguments.method()
ただし、これらのメソッドに引数を渡す必要があり、それらはすべて異なる引数のセットを受け入れます。
現在、次のNamespace
ように、argparse によって返されたオブジェクトを渡すだけです。
def a(arguments):
arg1 = getattr(arguments, 'arg1', None)
...
これは少しぎこちなく、dict
通常のパラメーターとしてではなく、または名前空間として引数を渡す必要があるため、メソッドを再利用するのが少し難しくなります。
何らかの方法でパラメーターを使用してメソッドを定義し (通常の関数と同じように)、適切なパラメーターを渡しながら動的に呼び出すことができるようにしたいと考えています。そのようです:
def a(arg1, arg2):
...
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.set_defaults(method = a)
...
arguments = parser.parse_args()
arguments.method() # <<<< Arguments passed here somehow
何か案は?