【发布时间】:2012-09-09 18:39:12
【问题描述】:
Python optparse 通常允许用户多次指定一个选项,并默默地忽略除最后一个选项之外的所有选项。例如,如果选项--foo 的操作为store,选项--flag 的操作为store_const、store_true 或store_false,则以下命令将等效:
my-command --foo=bar --foo=another --flag --foo=last --flag
my-command --flag --foo=last
(更新:argparse 默认做同样的事情。)
现在,我有很多选项,并且多次指定其中任何一个都没有意义。如果用户多次指定相同的选项,我想警告他们可能出现的错误。
检测多次指定的选项的最优雅方法是什么?请注意,相同的选项可以有短格式、长格式和缩写长格式(因此-f、--foobar、--foob 和--foo 都是相同的选项)。如果能够检测到同时指定具有相同destination 的多个选项的情况会更好,这样如果用户同时指定--quiet 和@987654334 就会发出警告@ 而这两个选项都将一个值存储到同一个目的地并有效地相互覆盖。
更新:为了更加用户友好,警告应该引用命令行中使用的确切选项名称。使用append 操作而不是store 是可能的,但是当我们检测到冲突时,我们无法说出是哪个选项导致的(是-q 和--verbose 还是--quiet --quiet?)。
不幸的是,我被 optparse 卡住了,无法使用 argparse,因为我必须支持 Python 2.6。
P。 S. 如果您知道仅适用于 argparse 的解决方案,请也发布它。虽然我尽量减少外部依赖项的数量,但在 Python 2.6 下使用 argparse 仍然是一种选择。
【问题讨论】:
-
您可以将 argparse 捆绑到您的模块中或使其成为依赖项
-
argparse适用于 python 2.3 及更高版本。 -
好的,我该如何使用 argparse?