是否有人知道使用单个短划线-r
和双短划线--r
指定argparse文章之间的主要区别是什么?
我遇到了this Julia语言argparse,它将它们分为短和长,但没有说明为什么要使用其中一个而不是另一个。
答案 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