2017-01-16 2 views
0

Я пытаюсь пропустить определенную группу параметров (только -p '). Я объявляю их в терминале следующим образом: python program.py -p paramOne paramTwo. Мой вывод программы - только paramOne, и я не понимаю, почему. Моя цель состоит в том, чтобы получить следующий результат:Как пропустить optparse.OptionGroup в Python

paramOne 
paramTwo 

Может ли кто-нибудь сказать мне, где ошибка в моем коде?

Вот код:

# Parcing definitions 
parser = optparse.OptionParser() 
groupParam = optparse.OptionGroup(parser, 'Output handling') 
parser.add_option('-q', '--quiet', action='store_false', dest='verbose', default=True, 
       help=('don\'t print status messages to stdout')) 
groupParam.add_option('-p', '--parameters', action='store', dest='paramNum', type='string', 
       help=('specify number of parameters (Optional)')) 

parser.add_option_group(groupParam) 

(options, args) = parser.parse_args() 


for groupParam1 in groupParam.option_list: 
    print getattr(options, groupParam1.dest) 

P.S. Я запускаю Python 2.6.6

ответ

1

Если вы не указали nargs, оно использует значение 1 в качестве значения по умолчанию; потребляя только один позиционный аргумент.

Укажите nargs=2, чтобы получить 2 значения:

groupParam.add_option(
    '-p', '--parameters', action='store', dest='paramNum', type='string', 
    nargs=2, # <--- 
    help=('specify number of parameters (Optional)') 
) 

По documentation:

Сколько аргументов типа типа следует употреблять, когда эта опция видел. Если> 1, optparse будет хранить кортеж значений до dest.

так, последний цикл должен быть изменен, чтобы проверить tuple печатать, как вы хотели:

for groupParam1 in groupParam.option_list: 
    values = getattr(options, groupParam1.dest) 
    if isinstance(values, tuple): 
     for value in values: 
      print(value) 
+0

Спасибо за ответ. Это действительно работает, но (я не упоминал), мои аргументы будут динамическими (0 - около 20), так как же может быть «nargs» динамическим? – Newskooler

+0

@Newskooler, вам нужно использовать ['argparse'] (https://docs.python.org/2/library/argparse.html) для использования динамических nargs ('? ',' * ',' + '), но, к сожалению, он доступен в Python 2.7+. См. Https://docs.python.org/2/library/argparse.html#nargs – falsetru

Смежные вопросы