Короткий ответ: вы не можете этого сделать, потому что nargs не поддерживает что-то вроде «2+».
Длинный ответ: вы можете обойти это, используя что-то вроде этого:
parser = argparse.ArgumentParser(usage='%(prog)s [-h] file file [file ...]')
parser.add_argument('file1', nargs=1, metavar='file')
parser.add_argument('file2', nargs='+', metavar='file', help=argparse.SUPPRESS)
namespace = parser.parse_args()
namespace.file = namespace.file1 + namespace.file2
Трюки, которые вам нужны:
- Используйте
usage
, чтобы предоставить парсеру собственную строку использования.
- Используйте
metavar
для отображения аргумента с другим именем в строке справки.
- Используйте
SUPPRESS
, чтобы не отображать справку для одной из переменных
- Объедините две разные переменные, просто добавив новый атрибут к объекту
Namespace
, который возвращает анализатор.
В приведенном выше примере создается следующая строка справки:
usage: test.py [-h] file file [file ...]
positional arguments:
file
optional arguments:
-h, --help show this help message and exit
и все равно будет терпеть неудачу, если будет передано менее двух аргументов:
$ python test.py arg
usage: test.py [-h] file file [file ...]
test.py: error: too few arguments
person
jcollado
schedule
07.12.2011