Как создать «каскадный» инструмент CLI, используя системные аргументы? - PullRequest
0 голосов
/ 04 сентября 2018

Вот мой пример кода:

def function1():

    parser = argparse.ArgumentParser(description='Test Cascading Utility')
    parser.add_argument('--number', type=str, help='Enter number')
    args = parser.parse_args()
    x = str(args.number)
    squares = float(x)**2

def function2():

    parser = argparse.ArgumentParser(description='Test Cascading Utility')
    parser.add_argument('--number1', type=str, help='Enter number')
    parser.add_argument('--number2', type=str, help='Enter number')
    args = parser.parse_args()
    x = str(args.number1)
    y = str(args.number2)
    div = float(x)/float(y)

def main():
    choice = sys.argv[1]
    if choice == 'Y':
        function1()
    elif choice == 'N':
        function2()
    else:
        print("Come on, choose a Y or N option.")

if __name__ == '__main__':
    main()

Я пытаюсь создать каскадный инструмент cli, в котором, основываясь на одной опции, которую я ввожу, он запускает определенный метод. Этот метод в свою очередь будет иметь свой собственный набор аргументов. Этот конкретный код выдает ошибку: error: unrecognized arguments: Y Это заставляет меня думать, что системный аргумент 'choice' переопределяется синтаксическим анализатором аргументов, поэтому как я могу реализовать этот каскадный эффект, когда на основе выбора я запускаю метод.

Это мой первый раз, когда я углубляюсь в argparse, и поэтому, пожалуйста, потерпите меня, если вопрос глупый. Но это то, что я действительно хотел бы реализовать.

1 Ответ

0 голосов
/ 04 сентября 2018

Я бы порекомендовал вам использовать клик. Это делает эти вещи очень простыми

http://click.pocoo.org/5/

Вам нужно использовать группы и, возможно, многокомандную цепочку

http://click.pocoo.org/5/commands/#group-invocation-without-command http://click.pocoo.org/5/commands/#multi-command-chaining

Вы можете создавать группы и подкоманды. Затем в каждой подкоманде вызывайте исходные функции, с которыми вы интегрируете.

...