Python - пропускать аргументы различным методам от аргпада

Я пишу относительно простой сценарий 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()

Однако я должен пропустить аргументы этим методам, и все они принимают разные наборы аргументов.

В настоящее время я просто пропускаю пространство имен объект , возвращаемый 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

любые идеи?

12
задан 7 September 2011 в 15:07
поделиться