Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2017 15:13:04

Cimaw
Зарегистрирован: 2017-05-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

argparse vs optparse

Приветствую, Товарищи!

Никак не могу решить одну, казалось бы, простую проблему.
Суть следующая:
Существует код на 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?

Отредактировано Cimaw (Май 20, 2017 15:13:38)

Офлайн

#2 Май 21, 2017 01:16:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10001
Репутация: +  857  -
Профиль   Отправить e-mail  

argparse vs optparse

  
#!/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]$



Отредактировано py.user.next (Май 21, 2017 01:17:20)

Офлайн

#3 Май 21, 2017 02:03:09

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

argparse vs optparse

Отказались от обоих в своей рабочей группе.
Используем Арминовский click

Отредактировано 4kpt_V (Май 21, 2017 02:03:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version