我想知道如何从命令行传递的可选参数中获取顺序,以便使用argparse处理。
有没有办法按照命令行字符串中的位置对它们进行排序或获取它们的索引?
我有一个图像处理类,它能够对图像应用不同的操作,比如旋转、裁剪、调整大小等等。
而这些操作应用的顺序通常是至关重要的(例如:您希望在调整图像大小之前先裁剪图像)。
以下是我的代码:
parser = argparse.ArgumentParser(description='Image processing arguments')
parser.add_argument('source_file', help='source file')
parser.add_argument('target_file', help='target file')
parser.add_argument('-resize', nargs=2, help='resize image', metavar=('WIDTH', 'HEIGHT'))
parser.add_argument('-rotate', nargs=1, help='rotate image', metavar='ANGLE')
parser.add_argument('-crop', nargs=4, help='crop image', metavar=('START_X','START_Y','WIDTH','HEIGHT'))
ar = parser.parse_args()
print ar
但是,无论我用什么顺序传递参数给脚本:
cmd.py test.jpg test2.jpg -crop 10 10 200 200 -resize 450 300
cmd.py test.jpg test2.jpg -resize 450 300 -crop 10 10 200 200
在名称空间中,项目始终按相同顺序排列(我想是按字母顺序):
Namespace(crop=['10', '10', '200', '200'], resize=['450', '300'], rotate=None, source_file='test.jpg', target_file='test
2.jpg')
有没有办法按照命令行字符串中的位置对它们进行排序或获取它们的索引?
__setattr__
方法会为所有默认值调用,无论它们是否被使用。 - Martin JiřičkaSUPPRESS
,则默认值将出现在“order”列表的开头,可能还会再次出现在结尾。解析器使用相同的__setattr__
来记录默认值和给定值。OrderAction
没有这个问题。 - hpaulj