Подтвердить что ты не робот

Pavon optparse metavar

Я не уверен, для чего используется параметр optparse metavar. Я вижу, что он используется повсюду, но я не вижу его использования.

Кто-нибудь может мне это понять? Спасибо.

4b9b3361

Ответ 1

Как говорит @Guillaume, он используется для создания справки. Если вы хотите иметь параметр, который принимает аргумент, например имя файла, вы можете добавить параметр metavar к вызову add_option, чтобы ваше имя/дескриптор предпочтительного аргумента выводилось в справочном сообщении. Из текущая документация модуля:

usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
parser.add_option("-f", "--filename",
                  metavar="FILE", help="write output to FILE"),

создаст такую ​​помощь:

usage: <yourscript> [options] arg1 arg2

options:
  -f FILE, --filename=FILE

"ФАЙЛ" после "-f" и "--filename" происходит из метавара.

Ответ 3

metavar - это переменная, используемая для печати на экране после опции. Обычно используется для ввода предложений после опции FILE или INT или STRING для пользователя. Без metavar, optparse будет печатать dest значение после того, как вы добавили.

Ответ 4

Существует еще одно содержательное использование метавара, в котором каждый хочет использовать "dest" в качестве тега lookup-tag, но маскирует сообщение справки метаваром. (Например, иногда полезно при использовании подпараметров). (Как указано в комментарии S.Lott).

parser.add_argument(
        'my_fancy_tag',
        help='Specify destination',
        metavar='helpful_message'
        )

или равно

parser.add_argument(
        dest='my_fancy_tag',
        help='Specify destination',
        metavar='helpful_message'
        )

Справка покажет метавар:

./parse.py -h usage: parser [-h] destination

positional arguments:   
  helpful_message  Specify destination

но dest сохранит fancy_tag в пространстве имен:

./parse.py test 
Namespace(my_fancy_tag='test')

Ответ 5

Теперь лучше использовать библиотеку argparse вместо optparse.

Причины, по которым даются здесь.