2015-09-15 6 views
2

Я использую argparse для разбора командной строки Python, который должен выглядеть следующим образом: python script_name.py --sdks=first, secondаргумент `argparse` множественного выбора?

Мой сценарий выглядит следующим образом:

sdk_choises = ['aio','sw'] 
parser = argparse.ArgumentParser(description='Blah blah') 
parser.add_argument('--sdks', action='append', nargs='+', required=True, help='specifies target SDK(s)') 
args = parser.parse_args() 
if 'aio' in args.sdks: 
    # do something with aio 
if 'sw' in args.sdks: 
    # do something with sw 

Когда я выполняю: python script_name.py --sdks=aio, sw Я получаю сообщение об ошибке:

"использование: script.py [-h] --sdks SDKs [...] SDKs
build.py: ошибка: непризнанные аргументы: ЮЗ"

Я хотел бы иметь возможность выбрать один или все варианты:
python script_name.py --sdks=first
python script_name.py --sdks=second
python script_name.py --sdks=first, second

Где я ошибся?

+1

Вы, конечно, должны удалить запятую: 'питона script_name.py - -sdks aio sw' – NiziL

+0

Ошибка такая же, без запятой. Как определяется разделитель? Это пробел или запятая? – Danijel

+0

Я думаю, что это зависит от вашей оболочки, но разделитель часто «». Я только что проверил ваш код (python 2.7.6 на ubuntu 14.04.3), все в порядке:/Ошибка должна быть расположена в файле build.py – NiziL

ответ

4

следующие приятные работы:

import argparse 
sdk_choises = ['aio','sw'] 
parser = argparse.ArgumentParser(description='Blah blah') 
parser.add_argument('--sdks', nargs='+', required=True, help='specifies target SDK(s)') 
args = parser.parse_args() 
print(args.sdks) 

Вы не нуждаются в = при прохождении вариантов, просто использовать:

$ python test.py --sdks ai pw 
['ai', 'pw'] 
+0

Собственно, он также работает с действием 'append', но дает' args.sdks == [[ 'aio', 'sw']] ':) – NiziL

+0

ОК, нашел его. Я использовал '--sdks = aio sw 'вместо' --sdks aio sw'. Поэтому без '='. Благодарю. – Danijel

+0

Не могли бы вы удалить предложение «append», действие, похоже, работает ОК здесь с action = 'store'. И, пожалуйста, укажите проблему =, чтобы я мог принять ваш ответ. – Danijel