python-3.x - 执行 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()
如何根据传入参数的顺序完成排序?谢谢!
解决方案
这个解析器提供了两种输入字符串列表的方法:
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
推荐阅读
- oracle - 需要从一个表中选择的列名来自另一个表
- php - Symfony 提交按钮不起作用 IsSubmitted 从未验证
- asp.net-core - 使用 asp.net core 在项目中创建 DevExpress Dashboard
- python-3.x - 使用 anaconda 的 jupyter notebook 安装 pandas 时出错
- laravel - conolibyte 的 Laravel 作曲家问题
- server - DigitalOcean Droplet 入站/出站(什么是什么?)
- docker - 在 Docker 映像中找不到文件
- i2c - 如何使用 STM32CUBE HAL 库进行连续 i2c 读取
- r - 根据某些条件创建箱线图
- unix - 在 Linux 中构建软件时,./configure 脚本中的 --prefix 有什么作用?