11

プログラムのコマンド ライン サブコマンドに Python argparse モジュールを使用しています。私のコードは基本的に次のようになります。

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title="subcommands", metavar="<command>")

subparser = subparsers.add_parser("this", help="do this")
subparser = subparsers.add_parser("that", help="do that")

parser.parse_args()

「python test.py --help」を実行するときに、利用可能なサブコマンドを一覧表示したいと思います。現在、次の出力が得られます。

usage: test.py [-h] <command> ...

optional arguments:
  -h, --help  show this help message and exit

subcommands:
  <command>
    this      do this
    that      do that

サブコマンドのリストの行をどうにかして削除<command>し、使用法の行に残すことはできますか? add_subparsers の引数として help=argparse.SUPPRESS を指定しようとしましたが、ヘルプ出力のすべてのサブコマンドが非表示になります。

4

1 に答える 1

17

PARSER アクションをフォーマットする場合に行を削除するだけの新しい HelpFormatter を追加することで解決しました。

class SubcommandHelpFormatter(argparse.RawDescriptionHelpFormatter):
    def _format_action(self, action):
        parts = super(argparse.RawDescriptionHelpFormatter, self)._format_action(action)
        if action.nargs == argparse.PARSER:
            parts = "\n".join(parts.split("\n")[1:])
        return parts
于 2012-11-17T09:21:55.383 に答える