1

このコード

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('target', help='Specifiy who to attack!')

magic = ['fireball', 'heal', 'microwave']
parser.add_argument('-m', '--magic', nargs='*',
                    choices=magic,
                    help=('Magic'))
parsed_arguments = parser.parse_args()

このヘルプ出力を生成します

usage: Example.py [-h]
                  [-m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]]]
                  target

positional arguments:
  target                Specifiy who to attack!

optional arguments:
  -h, --help            show this help message and exit
  -m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]], --magic [{fireball,heal,microwave} [{fireball,heal,microwave} ...]]
                        Magic

ヘルプ出力は紛らわしく、ターゲットを最後に指定する必要があるように見えますが、機能しません:python example.py -m fireball trollgives argument -m/--magic: invalid choice: 'troll'

言語の文法が曖昧になっていることは承知していますが、文の最後に1つの単語(ターゲット)が存在するはずなので、オプションtrollの引数ではないと言うことは可能です。-m

質問:

  1. argparseを大幅に打ち負かすことなく、位置引数を最後に指定する方法はありますか?
  2. argparseヘルプ出力にターゲットを実際に最初に指定する必要があることを示す方法はありますか?
4

1 に答える 1

1

コメントで前述したように、オプションの終わりを示すPOSIXシステムの標準的な方法は、引数とオプションをで区切ること--です。

2番目の質問については、これを実現するために独自のHelpFormatterを作成する必要がある場合があります。formatter -classを参照してください。デフォルトのフォーマッタから継承し、使用ラインを生成するために必要な関数のみをオーバーライドできる場合があります。

于 2012-04-24T11:18:14.193 に答える