Coldchain9
Coldchain9

Reputation: 1745

Executing argparse Arguments in order they are passed in terminal / cmd

I have a data augmentation script that has a class with a bunch of optional methods that are triggered by argparse arguments. I am curious how I can structure my code to process the argparse commands based on the order they are passed in from the terminal.

Goal: If I were to pass arguments as: python maths.py --add --multiply I would want it to add 10 first then multiply by 5 second. If I were to pass arguments as: python maths.py --multiply --add I would want it to multiply 5 first then add 10.

For example:

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()

How can I accomplish ordering based on the order of how the arguments are passed in? Thank you!

Upvotes: 0

Views: 111

Answers (1)

hpaulj
hpaulj

Reputation: 231550

This parser provides two ways of inputing lists of strings:

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

As values of a '--cmds' argument:

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

As separate flagged arguments:

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

In both cases I create a list of strings. In the second the const values could be functions or methods.

const=maths.addition

Upvotes: 1

Related Questions