我有以下代码
parser = argparse.ArgumentParser(description = 'Generates calculations from input files')
parser.add_argument('-c', '--by-client', action = 'store_true', help = 'Output issues broken down by client')
parser.add_argument('-cn', '--client-name', help = 'Generate output by client name provided', default=None)
当我运行脚本并提供像
-cn
这样的选项时,它会抛出错误
error: argument -c/--by-client: ignored explicit argument 'n'
奇怪的是,之前还能用,但突然就不动了。
使用单个
-
表示标志仅是单个字符。您的 -cn
将始终被解释为两个标志 -c
和 -n
。
在撰写本文时,Python 手册实际上并未说明这一点。看起来,这就是
getopt
和 POSIX 标准的行为。
来自我认为是标准文档
准则 3: 每个选项名称应该是可移植字符集中的单个字母数字字符(alnum 字符分类)。 -W(大写-W)选项应保留给供应商选项。 不允许使用多位数选项。
准则 4: 所有选项前面都应带有“-”分隔符。
显然,当使用单个连字符
-
时,我们将参数称为选项,并且它们始终是单个字符。当使用双连字符--
时,我们称为形参和参数,它们可以有更长的名称。
编辑1:
Argparse 不使用 getopt 并且我找不到任何声称 argparse 希望像 getopt 一样工作的说法。它恰好像 getopt 一样工作。