argparse中单个破折号和双破折号之间的区别

时间:2016-02-24 13:36:39

标签: python argparse

是否有人知道使用单个短划线-r和双短划线--r指定argparse文章之间的主要区别是什么?

我遇到了this Julia语言argparse,它将它们分为短和长,但没有说明为什么要使用其中一个而不是另一个。

3 个答案:

答案 0 :(得分:9)

--foo等长选项来自GNU tradition

  

GNU为这些约定添加了长选项。长选项包括' - '后跟由字母数字字符和短划线组成的名称。选项名称通常为一到三个字长,用连字符分隔单词。只要缩写是唯一的,用户就可以缩写选项名称。

支持短选项-f和长选项--foo是很常见的。双短划线--用于区分长选项和短选项集合。通常,你可以写两个

go -a -b -c 

或缩写形式

go -abc

来自

不同
go --abc

这是一个不同的选择。

答案 1 :(得分:2)

如果遵循通常的约定,单个破折号参数只包含一个char,因此-abc-a -b -c相同。带有双短划线的参数名称被视为整个单词,因此--abc只是名为abc单个参数。

答案 2 :(得分:0)

尽管 argparse 支持可以使用单个字母指定多个短选项(使用单破折号)的约定,例如,-abc 可以是指定 -a -b -c 的较短方式,但 argparse 也允许非常规使用带有单破折号选项的单词,这可能会使一些简短的形式由于歧义而无法使用:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-ab', action='store_true')
parser.add_argument('-ac', action='store_true')
parser.add_argument('-b', action='store_true')
parser.add_argument('-c', action='store_true')
parser.add_argument('-bczzz', action='store_true')
parser.add_argument('-z', action='store_true')
args = parser.parse_args()
print(args)
$ python3 parse.py -a
usage: parse.py [-h] [-ab] [-ac] [-b] [-c] [-bczzz] [-z]
parse.py: error: ambiguous option: -a could match -ab, -ac

$ python3 parse.py -ab
Namespace(ab=True, ac=False, b=False, bczzz=False, c=False, z=False)

$ python3 parse.py -abz
usage: parse.py [-h] [-ab] [-ac] [-b] [-c] [-bczzz] [-z]
parse.py: error: unrecognized arguments: -abz

$ python3 parse.py -bc
usage: parse.py [-h] [-ab] [-ac] [-b] [-c] [-bczzz] [-z]
parse.py: error: ambiguous option: -bc could match -b, -bczzz

$ python3 parse.py -cb
Namespace(ab=False, ac=False, b=True, bczzz=False, c=True, z=False)

$ python3 parse.py -bczz
usage: parse.py [-h] [-ab] [-ac] [-b] [-c] [-bczzz] [-z]
parse.py: error: ambiguous option: -bczz could match -b, -bczzz