我想知道如何从命令行传递的可选参数的顺序argparse为了蟒蛇+ 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 450调整大小300
cmd.py测试.JPG test2.jpg调整大小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')
有办法按命令行字符串中的位置对它们进行排序或获取它们的索引吗?
OrderNamespace是一个很好的解决方案,如果一个人也想使用其他操作(例如builtins)。好想法! –
不幸的是,当设置了默认值时,将调用所有默认值的__setattr__方法,但是它们是否被使用。 –
如果您不使用'SUPPRESS',默认值将出现在'订单'列表的开头,也可能在结尾处再次出现。 'parser'使用相同的'__setattr__'来记录默认值和给定值。 'OrderAction'没有这个问题。 – hpaulj