【发布时间】:2013-09-03 20:46:35
【问题描述】:
如何添加一个可选且不能多次指定的参数?
有效:
$ ./my.py
$ ./my.py --arg MyArgValue
无效:
$ ./my.py --arg MyArgValue --arg ThisIsNotValid
如果我添加如下参数:
parser.add_argument('--arg', type=str)
无效示例生成字符串ThisIsNotValid。我预计会出现解析器错误。
【问题讨论】:
-
在我的 python 安装 (2.7) 上,当我复制和粘贴您的代码时,我没有得到一个包含一个元素 (
['ThisIsNotValid']) 的列表,而是一个字符串 ('ThisIsNotValid')。 -
正确:已编辑问题。
-
为什么您的用户可能会多次使用此选项? argparse 的默认行为是允许以任何顺序使用标志,包括重复它们。但除了
count和append动作之外,重复几乎没有用 - 除了可能纠正之前的使用。 -
@hpaulj:错了。因此,我发现自己对脚本进行了数小时的故障排除。对于这种覆盖先前指定选项的 argparse 行为,我个人认为没有任何有意义的用例。
-
argparse 仅通过参数字符串起作用。如果它找到
-o字符串,它会尝试执行对该字符串指定的操作。如果它再次遇到那个字符串,它会做同样的事情,而不参考它之前做过的事情的记录。这对于count和append操作很方便,但在您的情况下不方便。但是,它确实会跟踪它处理了哪些位置。但这些都是“无名”论点,必须以特定顺序出现,不得重复。