В argparse
это довольно просто, с параметром nargs
:
In [245]: parser = argparse.ArgumentParser()
In [246]: parser.add_argument('-e','--echo', nargs='+');
In [247]: parser.parse_args(['-e','hello','world'])
Out[247]: Namespace(echo=['hello', 'world'])
nargs
используется для указания количества строк, которые принимает действие. «+» означает один или несколько. Результаты собраны в список. Он моделирует значения nargs
для использования регулярных выражений (например, '?' И '*' также работают).
In [248]: parser.print_help()
usage: ipython3 [-h] [-e ECHO [ECHO ...]]
optional arguments:
-h, --help show this help message and exit
-e ECHO [ECHO ...], --echo ECHO [ECHO ...]
Глядя на документы optparse
, я вижу параметр nargs
, но он должен быть числом. Для переменного числа мы должны использовать callback
, как описано в:
https://docs.python.org/2/library/optparse.html#callback-example-6-variable-arguments
Использование функции, определенной в этом разделе:
In [266]: parser = optparse.OptionParser()
In [267]: parser.add_option('-e','--echo', dest='echo', action='callback', callback=vararg_callback);
In [268]: parser.parse_args(['-e','hello','world'])
Out[268]: (<Values at 0x7f0ff208a5c0: {'echo': ['hello', 'world']}>, [])
В argparse
, nargs='+'
собирает значения вплоть до следующего --
или -
, но это распределение выполняется сверху вниз с помощью основной процедуры синтаксического анализа, а не обратного вызова, определенного для самого option
.