我在这里的argparse帖子中进行了很多搜索,但实际上找不到与我遇到的问题相关的任何内容。 我需要解析一个将多个图像及其可选特征作为输入的命令行。 例如,我想解析这样的命令行:
image_tool.py -n 3 image_1 -c green -y 3 image_2 -x 2 -y 7 image_3 -c black -x 10
我在下面的测试程序中得到的输出是正确的。
('green', '3', '3')
('red', '2', '7')
('black', '10', '5')
但是问题是当我尝试获得刚刚得到的帮助时:
$image_tool.py -h
usage: image_tool [-h] [-n NUM_IMAGES] [-m MODE]
optional arguments:
-h, --help show this help message and exit
-n NUM_IMAGES, --num_images NUM_IMAGES Number of Images
-m MODE, --mode MODE Tool mode
没有提及image_ *参数或子解析器。即使使用image_tool.py image_1 -h
,我也会得到相同的输出。
有谁知道如何获得图像处理者的帮助?理想情况下,我想使用image_tool.py -h
我还想知道我是否在这里滥用子解析器功能。有谁对实现相同功能有更好的建议?参数组,不同的解析器库,...?看起来我需要的是用于子解析器的“附加”功能,该功能可创建命名空间列表。 一种更简单的方法可能是使用图像信息解析json文件,但是现在我仅限于命令行。
谢谢!
import argparse
parser = argparse.ArgumentParser(prog='image_tool')
parser.add_argument('-n', '--num_images', dest='num_images', type=int, action='store', default='2', help='Number of Images')
parser.add_argument('-m', '--mode', action='store', dest='mode', help="Tool mode")
options, argv = parser.parse_known_args()
subparsers = parser.add_subparsers(help='sub-help', dest='sp_image')
for i in range(0,options.num_images+1):
sp= subparsers.add_parser('image_%i'%i, help='image help')
sp.add_argument("-c", "--color", action="store", dest='color', default='red', help="Color")
sp.add_argument("-x", "--width", action="store", dest='width', default='3', help="Width")
sp.add_argument("-y", "--height", action="store", dest='height', default='5', help="Height")
image = []
while argv:
print('Remaining command line ', argv)
# Only use one image to allow duplicates
try:
index = [idx for idx, s in enumerate(argv[1:]) if s.startswith('image_')][0]
except IndexError:
#last one
index = idx+1
opt = parser.parse_args(argv[:index+1])
# Cut off first image from command line
argv = argv[index+1:]
image.append(opt)
if not opt.sp_image:
break
# Test code
for img in image:
print (img.color, img.width, img.height)