我想创建一个可选参数,它将是'-- '
(双短划线和空格)并将其后的所有内容作为其值。问题是'-- '
之后可能会出现一些其他可选参数。我不希望将这些解析为可选参数,而是作为'-- '
的值。例如:
python prog1 --foo 1 --bar 2
此处foo
和bar
是可选参数,分别为1
和2
python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
在这里,我希望foo
之前的bar
和'-- '
被解析为可选参数。但我希望'--foo 4 --bar 14'
被解析为可选参数'-- '
的值。我想这样做,如果可能的话,不要将'-- '
之后的参数重命名为foo2
和bar2
。
这可能吗?这怎么可以实现?
答案 0 :(得分:8)
argparse
已经支持--
作为选项结束终止符。唯一的区别是默认处理单独处理以下参数。假设prog1
看起来像
import argparse
p = argparse.ArgumentParser()
p.add_argument('--foo')
p.add_argument('--bar')
p.add_argument('remaining', nargs=argparse.REMAINDER)
print p.parse_args()
然后是命令
% python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
产生
Namespace(bar='2', foo='1', remaining=['--foo', '4', '--bar', '14'])
(而不是Namespace(..., remaining='--foo 4 --bar 14')
)。如果需要,可以通过快速后处理步骤进行修复:
args = p.parse_args()
args.remaining = " ".join(args.remaining)
print args
然后结果是
Namespace(bar='2', foo='1', remaining='--foo 4 --bar 14')
答案 1 :(得分:0)
看起来docopt库可以为您执行此操作;
来自usage-pattern-format
部分:
" [ - ]&#34 ;.双击" - "按惯例用于分隔位置 可能被误认为选项的参数。为了支持这一点 惯例添加" [ - ]"你的使用模式。