-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