Я пишу относительно простой сценарий 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
любые идеи?