argparseで”-h”をhelp以外に使いたい

-h / –helpは当然そのコマンドのヘルプを表示するのがデファクトなんだが、-h / –hostというオプションを使いたい。でも、–helpを渡したらヘルプを表示して欲しい。

これをそのまま書くと以下になるけれど、

#!/usr/bin/env python3

import argparse

parser = argparse.ArgumentParser(description='Test Parse')
parser.add_argument("--host", "-h")
args = parser.parse_args()

実行すると、当然、「conflictしてんぞ!」怒られが発生する。

argparse.ArgumentError: argument --host/-h: conflicting option string: -h

怒られないようにするには、add_help=Falseする。

parser = argparse.ArgumentParser(description='Test Parse', add_help=False)

当然、–helpは使えなくなる。

% test.py: error: unrecognized arguments: --help

これは当然ダメ。

parser.add_argument("--help", action=parser.help())

AttributeError: 'ArgumentParser' object has no attribute 'help'

以下は動くが、美しくない。

def help():
    global parser
    parser.help()

parser = argparse.ArgumentParser(description='Test Parse', add_help=False)
parser.add_argument("--host", "-h")
parser.add_argument("--help", action="help")

と思ったら、こんな書き方が出来ることに気が付いた。

#!/usr/bin/env python3

import argparse

parser = argparse.ArgumentParser(description='Test Parse', add_help=False)
parser.add_argument("--host", "-h")
parser.add_argument("--help", action="help", help="Show Help")
args = parser.parse_args()

–helpを実行すると、こうなる。なるほどね。

usage: test.py [--host HOST] [--help]

Test Parse

optional arguments:
  --host HOST, -h HOST
  --help                Show Help
タイトルとURLをコピーしました