参数解析器忽略空格中的第二个字符

问题描述 投票:0回答:1

我有以下代码

 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'

奇怪的是,之前还能用,但突然就不动了。

python argparse
1个回答
0
投票

使用单个

-
表示标志仅是单个字符。您的
-cn
将始终被解释为两个标志
-c
-n

在撰写本文时,Python 手册实际上并未说明这一点。看起来,这就是

getopt
和 POSIX 标准的行为。

来自我认为是标准文档

准则 3: 每个选项名称应该是可移植字符集中的单个字母数字字符(alnum 字符分类)。 -W(大写-W)选项应保留给供应商选项。 不允许使用多位数选项。

准则 4: 所有选项前面都应带有“-”分隔符。

显然,当使用单个连字符

-
时,我们将参数称为选项,并且它们始终是单个字符。当使用双连字符
--
时,我们称为形参和参数,它们可以有更长的名称。


编辑1:

Argparse 不使用 getopt 并且我找不到任何声称 argparse 希望像 getopt 一样工作的说法。它恰好像 getopt 一样工作。

© www.soinside.com 2019 - 2024. All rights reserved.