現在、無効なオプションを入力したり、位置引数を省略したりすると、argparseはプロンプトに戻り、アプリの使用状況を表示します。これは問題ありませんが、ユーザーに入力を要求するよりも、完全なヘルプリスト(オプションなどを説明する)を自動的に表示したいと思います。
./myscript.py -h
ありがとう!
ジェイミー
この thread Googleグループでは、次のコードスニペットがあり、トリックを実行しているようです(わずかに変更されています)。
class DefaultHelpParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
ヘルプを印刷するには、次のように使用します。ArgumentParser
インスタンスの_print_help
_関数
_parser = argparse.ArgumentParser()
(...)
parser.print_help()
_
エラー時にヘルプメッセージを出力するには、error()
メソッドをオーバーライドするArgumentParser
インスタンスの独自のサブクラスを作成する必要があります。たとえば、次のようになります。
_class MyParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
_
このパーサーが解析不可能な引数行に遭遇すると、ヘルプを出力します。
また、クラスや例外を使用せずにヘルプを印刷することもできます。
def _error(parser):
def wrapper(interceptor):
parser.print_help()
sys.exit(-1)
return wrapper
def _args_get(args=sys.argv[1:]):
parser = argparser.ArgumentParser()
parser.error = _error(parser)
parser.add_argument(...)
...
。 ArgumentParser.error
関数をでラップし、message
引数をインターセプトするだけです。私はそこで、以前に答えました:
usage=argparse.SUPPRESS
で使用法の印刷を抑制します。次に、ArgumentParserがエラー時に発生するSystemExit例外をキャッチし、ヘルプを出力して、例外を再度発生させて終了します。
parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
parser.add_argument(...)
try:
args = parser.parse_args()
except SystemExit:
parser.print_help()
raise