首页 > 解决方案 > 执行 argparse 参数,以便它们在终端 / cmd 中传递

问题描述

我有一个数据增强脚本,它有一个类,其中包含一组由 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()

如何根据传入参数的顺序完成排序?谢谢!

标签: python-3.xclasscmdterminalargparse

解决方案


这个解析器提供了两种输入字符串列表的方法:

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

推荐阅读