argparse中的帮助详细程度不同



我有一个带有几十个CLI参数的应用程序。我使用python argparse来解析参数。它们中的大多数很少使用,只有5或6个是经常使用的。我不想在简单的情况下混淆--help的输出,但是仍然有可能看到所有参数的描述。

argparse中可能有几个详细级别的帮助?这是我所期望的。

$ myapp -h
optional arguments:
--foo         Do foo stuff
--bar         Do bar stuff
$ myapp -hh # or myapp --expert-mode -h
optional arguments:
--foo         Do foo stuff
--bar         Do bar stuff
expert arguments:
--use-warp-drive
--no-fasten-seatbelts
... 50 more arguments

我的第一个想法是创建两个ArgumentParser,一个是基本的,另一个是详细的。首先,调用了基本的parse_args。如果存在--expert标志,则会创建并调用详细解析器。这种方法有两个缺点。首先,-h是由第一个解析器无条件处理的,所以我应该实现我自己的类似帮助标志。其次,在没有--expert标志的情况下,专家选项甚至无法解析,我希望无条件地解析它们(但不要在帮助中弹出(。

注意:该解决方案应该与python2兼容。


更新:使用Lior Cohen的回答和这个问题中的想法,我创建了一个工作示例。在我的情况下,制作一个";简单的";选项,因此甚至没有必要使用标记的操作类型。

图示代码如下。

class ExpertHelpFormatter(argparse.HelpFormatter):
skip_expert_section = True
whitelist = set(("foo",))
def add_usage(self, usage, actions, groups, prefix=None):
if self.skip_expert_section:
actions = [action for action in actions if action.dest in self.whitelist]
ret = super(ExpertHelpFormatter, self).add_usage(usage, actions, groups, prefix)
if self.skip_expert_section:
self.add_text("Use -hh for detailed help.")
return ret
def add_argument(self, action):
if self.skip_expert_section and action.dest not in self.whitelist:
return
super(ExpertHelpFormatter, self).add_argument(action)
def main():
parser = argparse.ArgumentParser(add_help=False, formatter_class=ExpertHelpFormatter)
parser.add_argument("-h", "--help", action="count", default=0)
parser.add_argument("--foo")
parser.add_argument("--use-warp-drive", action="store_true")
args = parser.parse_args()
if args.help == 1:
print parser.format_help()
return
elif args.help > 1:
ExpertHelpFormatter.skip_expert_section = False
print parser.format_help()
return

这里有一个布局,它应该能满足您的需求,尽管它不是"免费工作";。

  1. 通过add_help = False禁用默认帮助(请参阅此处(。这将使您仍然可以使用-h--help执行您想要的操作
  2. 你需要";标签";您的专家论点按类型,将以某种方式存储CCD_简单的";并且CCD_ 8是"0";专家";。您可以向Action添加一个属性,或者在解析器本身中保存一个全局dict
  3. 编写帮助格式化程序(您可以看到示例(。然后根据上述";标签";,你可以抑制";专家;在"0"的情况下通过返回CCD_;简单的";模式

希望这能有所帮助。

相关内容

最新更新