Выполнение аргументов argparse в порядке их передачи в терминал / cmd - PullRequest
0 голосов
/ 14 июля 2020

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

Цель: если бы я передавал аргументы как: python maths.py - add --multiply Я бы хотел, чтобы сначала добавлялось 10, а затем умножалось на 5 секунд. Если бы я передавал аргументы как: python maths.py --multiply --add, я бы хотел, чтобы он сначала умножил 5, а затем прибавил 10.

Например:

class Maths:
      def __init__(self):
          self.counter = 0

      def addition(self, num):
          self.counter += num
          return self

      def multiply(self, num):
          self.counter *= num
          return self

 
def main():
        parser = argparse.ArgumentParser()
        parser.add_argument('--add', required = False, action = 'store_true')
        parser.add_argument('--multiply', required = False, action = 'store_true')
        args = parser.parse_args()
        maths = Maths()
        maths.addition(10)
        maths.multiply(5)
        print(maths.counter)

if __name__ == "__main__":
      main()

Как я могу упорядочить sh в зависимости от порядка передачи аргументов? Спасибо!

1 Ответ

1 голос
/ 14 июля 2020

Этот синтаксический анализатор предоставляет два способа ввода списков строк:

In [10]: parser = argparse.ArgumentParser() 
    ...: parser.add_argument('--cmds', nargs='*', choices=['add','mult']) 
    ...: parser.add_argument('--add', dest='actions', action='append_const', const='add') 
    ...: parser.add_argument('--multiply', dest='actions', action = 'append_const', const='mult') 
    ...: parser.print_help() 
    ...:  
    ...:                                                                                             
usage: ipython3 [-h] [--cmds [{add,mult} [{add,mult} ...]]] [--add]
                [--multiply]

optional arguments:
  -h, --help            show this help message and exit
  --cmds [{add,mult} [{add,mult} ...]]
  --add
  --multiply

Как значения аргумента '--cmds':

In [11]: parser.parse_args('--cmds mult add'.split())                                                
Out[11]: Namespace(actions=None, cmds=['mult', 'add'])

Как отдельные помеченные аргументы:

In [12]: parser.parse_args('--mult --add'.split())                                                   
Out[12]: Namespace(actions=['mult', 'add'], cmds=None)

В обоих случаях я создаю список строк. Во втором const значения могут быть функциями или методами.

const=maths.addition
...