格式化位置参数的argparse帮助

时间:2017-03-28 16:34:02

标签: argparse user-experience

默认argparse帮助输出很难看:

usage: gl.EXE [-h] [--version]
              {track,untrack,status,diff,commit,branch,tag,checkout,merge,resolve,fuse,remote,publish,switch,init,history}
              ...

Gitless - a version control system built on top of Git - http://gitless.com

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

subcommands:
  {track,untrack,status,diff,commit,branch,tag,checkout,merge,resolve,fuse,remote,publish,switch,init,history}
    track               start tracking changes to files
    untrack             stop tracking changes to files
    status              show status of the repo
...

如何将输出格式化为完全如下例所示。保留命令的顺序

Gitless - a version control system built on top of Git - http://gitless.com

commands:

  track               start tracking changes to files
  untrack             stop tracking changes to files
  status              show status of the repo
...

1 个答案:

答案 0 :(得分:1)

子类化argparse.RawDescriptionHelpFormatter太多了,所以我已经使用这个hack来提取命令列表并构建我自己的消息。

def print_help(parser):
  """print help for humans"""
  print(parser.description)
  print('\ncommands:\n')

  # https://stackoverflow.com/questions/20094215/argparse-subparser-monolithic-help-output
  # retrieve subparsers from parser
  subparsers_actions = [
      action for action in parser._actions 
      if isinstance(action, argparse._SubParsersAction)]
  # there will probably only be one subparser_action,
  # but better save than sorry
  for subparsers_action in subparsers_actions:
      # get all subparsers and print help
      for choice in subparsers_action._choices_actions:
          print('    {:<19} {}'.format(choice.dest, choice.help))