2017-01-04 3 views
0

Я пытаюсь добиться чего-то вроде этого:Дополнительные подопции после positonal вариантов argparse

питон main.py --severity высокой --start_date 10/12/2016

питон main.py - имя Самуила

Здесь, аргумент --start_date агд будет только справедливо, если предыдущий аргумент --severity. Если у нас есть - имя вместо --severity. Арграмент должен возвращать ошибку. Как это достичь? Я искал какое-то время и не мог найти то, что хотел.

+0

Что бы вы сделали, если бы дали '--severity' после' --start_date'? Или '--name' вместе с' --severity'? 'argparse' позволяет вводить помеченные аргументы вроде этого в любом порядке. Если порядок важен для вас, тогда 'argparse' является неправильным инструментом. – hpaulj

+0

«mutually_exclusve_group» может вызывать ошибку, если «--start_date» предоставляется вместе с '--name', но не существует механизма для« взаимного включения ». – hpaulj

+0

Полезный предыдущий вопрос: http://stackoverflow.com/questions/19414060/argparse-required-argument-y-if-x-is-present – hpaulj

ответ

1

К сожалению, argparse не имеет такой возможности, поэтому вам придется делать это явно. Что-то вроде этого должно работать:

... 
args = parser.parse_args() 
if getattr(args, 'start_date', None) and not getattr(args, 'severity', None): 
    parser.print_help() 
    parser.exit(1, "error message") 
+0

Если вы не использовали 'default = SUPPRESS', пространство имен всегда будет иметь атрибут« серьезность ». 'args.severity is None '- лучший тест. – hpaulj

+0

@hpaulj хороший ловушка! изменен на getattr со значением по умолчанию, чтобы заставить его работать в обоих случаях. Хотя, 'if args.start_date, а не args.severity:' будет более читаемым – Marat