我正在尝试对图像进行数学运算。 我已定义以下内容(这是我的真实代码的简化版本):
parser = argparse.ArgumentParser(description='Arithmetic operations on images')
parser.add_argument("input1", metavar='input1', action='store',
help='list of input images to operate with', nargs="+", type=str)
parser.add_argument("operation", metavar='operation', action='store', type=str,
help='type of operation (+,-,*,/) to be done', nargs=1)
parser.add_argument("input2",metavar='input2', action='store', nargs="+",
type=str, help='image (or value) with which to perform the operation on input1')
这段代码会产生:
arith.py -h
usage: arith.py [-h] input1 [input1 ...] operation input2 [input2 ...]
所以它确实理解输入1可能包含一个或多个元素,操作将是单一的,输入2可以是任意数量的元素。
问题在于,有两个位置参数和一个未确定元素数量的元素,argparse会混淆哪个是哪个。我已经尝试向'operation'添加choices=["+", "-", "*", "/"],以便它知道在哪里进行分离,但似乎argparse无法实现。实际上,在argparse文档中,关于nargs='*',您可以阅读到:
注意,通常没有必要使用nargs='*'具有多个位置参数
我想我可以将args.input1、args.operation和args.input2相加,并寻找“+”、“-”、“/”和“*”来分离自己,但在做出如此丑陋的事情之前,我想借鉴集体思想。
argparse
是否适合你在这里所做的事情。 直接通过sys.argv
进行可能会更容易些。 - khelwoodargparse
可以构建这样的帮助信息,但这并不意味着它可以按照您想要的方式解析参数。如果我调用arith.py a b c d e f g
,那么哪一个是operation
?它可能是b
到f
中的任何一个。argparse
没有任何回溯模式匹配器内置;它只是以贪婪的方式从左到右处理参数。 - chepnerinput1
和input2
是如何处理的?input1
的第k
个元素是否与input2
的第k
个元素使用指定的运算符配对?还是计算两个列表的笛卡尔积,并将运算符应用于产品的每个元素?或者是其他什么? - chepner