Найти - Пользователи
Полная версия: argparse vs optparse
Начало » Python для новичков » argparse vs optparse
1
Cimaw
Приветствую, Товарищи!

Никак не могу решить одну, казалось бы, простую проблему.
Суть следующая:
Существует код на python с использованием argparse, в котором все значения после определенного аргумента командной строки попадают в список, реализовано это так -
 parser.add_argument('-p', type=int, nargs='+')
                    args = parser.parse_args()
nargs='+' - передает все значения в список, если значений 1 и больше.
В результате в args.p будет находиться список, которым можно оперировать.

Появилась необходимость сделать тоже самое с модулем optparse, но похожего применения nargs я не нашел, в optparse количество значений строго определено nargs(по умолчанию =1). Смотрел в сторону append, но для того, что бы поместить несколько значений в список нужно перед каждым из них использовать ключ командной строки.

Вопрос - возможно ли средствами optparse организовать передачу всех элементов после ключа командной строки в список, также как это происходит в argparse?
py.user.next
  
#!/usr/bin/env python3
 
from optparse import OptionParser
 
def f(option, opt, value, parser):
    for arg in parser.rargs:
        if arg.startswith(('-', '--')):
            break
        parser.values.a.append(int(arg))
 
parser = OptionParser()
 
# Можно так сделать
# (если известно количество позиционных аргументов после опции)
# parser.add_option("-a", action='append', type=int, nargs=3)
 
parser.set_defaults(a=[])
parser.add_option("-a", action='callback', callback=f)
parser.add_option("-b", action='store_true')
 
opts, args = parser.parse_args(['-a', '1', '2', '3', '-b', '-a', '4', '5', '6'])
print('opts:', opts)
print('args:', args)
print('a:', opts.a)
print('b:', opts.b)

[guest@localhost py]$ ./opts.py
opts: {'b': True, 'a': [1, 2, 3, 4, 5, 6]}
args: ['1', '2', '3', '4', '5', '6']
a: [1, 2, 3, 4, 5, 6]
b: True
[guest@localhost py]$
4kpt_V
Отказались от обоих в своей рабочей группе.
Используем Арминовский click
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB