2016-10-28 6 views
0

У меня есть два аргумента: --1st и --2nd Я пытаюсь сделать аргумент «-2nd», только если установлен «1-й» аргумент.Python argparse зависимость аргументов

Например:

Если «первый» установлен и «второй» установлен - хороший

Если «первый» не установлен и «второй» не установлен - хороший

Другое случаи плохие. Помогите мне, пожалуйста

+0

Согласны ли оба аргумента? или это только второй вариант? –

+0

Оба варианта. Но если 1-й сет, требуется 2-й. Если 2nn установлено, сначала требуется. В других случаях должна быть ошибка – GolovDanil

+0

Я бы сделал их как необязательными в argparse, а затем написал свой собственный код для проверок проверки на результат вызова 'parse_args'. – larsks

ответ

2

Мне нравится решение Кабануса. Вот еще один, который является более простым для нового пользователя:

parser = argparse.ArgumentParser() 
parser.add_argument('--first') 
parser.add_argument('--second') 
options = parser.parse_args() 

# Error checking 
if (options.first is None) != (options.second is None): 
    print 'Error: --first and --second must both be supplied or omitted' 

Обсуждение

  • Я не использую --1st и --2nd так options.1st не работает и getattr(options, '1st') is too messy. Instead, I use --first and --second` для цель иллюстрации.
  • Выражение (options.first is None) != (options.second is None) кратко выразило ваше состояние ошибки.
+0

Вы все равно можете использовать '--1st' в качестве имени командной строки, если вы указали' dest = 'first'' для полезного имени атрибута Python. – ShadowRanger