Эта программа:Argparse предлагает бессмысленный порядок помощи использования текста линии
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('files', metavar='INPUT', nargs='*',
help='File(s) containing words to include. If none given, stdin will be used.')
parser.add_argument('-x', '--exclude', nargs='*',
help='File(s) containing words to exclude.')
args = parser.parse_args()
print args.files
print args.exclude
производит этот выход при запуске в Python 2.7.9:
$ python prog.py --help
usage: prog.py [-h] [-x [EXCLUDE [EXCLUDE ...]]] [INPUT [INPUT ...]]
positional arguments:
INPUT File(s) containing words to include. If
none given, stdin will be used.
optional arguments:
-h, --help show this help message and exit
-x [EXCLUDE [EXCLUDE ...]], --exclude [EXCLUDE [EXCLUDE ...]]
File(s) containing words to exclude.
Однако, что «помощь» выход инструктирует пользователя использовать бессмысленное упорядочение аргументов. Это бессмысленно, потому что если используется опция -x
, то не будут обнаружены аргументы INPUT
.
Argparse должно вместо того, чтобы сообщить пользователю использовать этот порядок:
usage: prog.py [-h] [INPUT [INPUT ...]] [-x [EXCLUDE [EXCLUDE ...]]]
два вопроса:
- Является ли это ошибка в
argparse
? (Я думаю, что это так.) - Независимо от того, является ли это ошибкой, как я могу исправить это так, чтобы
$ python prog.py --help
выдал текст справки, который я хочу (см. Выше), желательно как DRY как можно?
Цель argparse - уменьшить нагрузку на программиста, когда (генерируя текст справки для) анализирует аргументы командной строки. Если argparse собирается генерировать строку использования «автоматически», то по умолчанию она должна поступать правильно. Во что бы то ни стало пусть сначала ставит помеченные аргументы во всех случаях, когда это имеет смысл, но это абсолютно не следует делать в тех случаях, когда это было бы бессмысленно, потому что это не помогает программисту почти так много. Программисту не нужно бороться с его инструментами. Вот почему я думаю, что это ошибка. Спасибо за ответ на оба моих вопроса, хотя :) – sampablokuper
Приглашаем вас отправить исправление, исправляющее это. Метод, который генерирует линию использования, довольно длинный и хрупкий. Он может использовать некоторое улучшение. – hpaulj