我有一个必须接受这样的命令行的程序:
python wood.py clean and paint chair red
命令行按以下顺序读取:
clean
,sand
或paint
。 and
一词是语法糖,以后会忽略blue
,white
或red
vintage
,rush
或eco
我已经用以下Python代码实现了
import argparse
from pprint import pprint as pp
parser = argparse.ArgumentParser()
parser.add_argument('operations', metavar='operations', type=str, choices=['clean','sand','paint', 'and'], nargs="+")
parser.add_argument('furniture', metavar='furniture', type=str)
parser.add_argument('color', metavar='color', choices=['blue','white','red'], type=str)
parser.add_argument('handling', metavar='handling', type=str, choices=['rush','vintage','ecologic'], nargs="?")
args = parser.parse_args()
pp([op for op in args.operations if op != 'and'])
pp(args.furniture)
pp(args.color)
pp(args.handling)
它可以工作,但是当我在最后添加可选的handling
参数时,argparse会将家具(椅子)解释为一种操作。
> python wood.py clean and sand and paint chair red vintage
usage: wood.py [-h]
operations [operations ...] furniture [furniture ...] color
[handling]
wood.py: error: argument operations: invalid choice: 'chair' (choose from 'clean', 'sand', 'paint', 'and')
是什么使argparse认为选择参数之后的任意字符串是该选择的一部分?
答案 0 :(得分:0)
argparse
令人困惑,因为处理从h
开始,而h
用于help
。使用其他单词或使用大写的H
parser.add_argument('Handling', metavar='handling', help='bam')
由于args.Handling
仅会更改帮助文本中的名称,因此以后您将不得不使用metavar
。