Разобрать аргумент командной строки с помощью argparse

У меня есть утилита, которая передает несколько аргументов вместе с требуемым элементом. Может ли кто-нибудь предоставить некоторые данные. Как я могу справиться с этим сценарием, используя argparse. Пожалуйста, найдите пример кода

#! /usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-cdl", dest = "input_file")
args = parser.parse_args()
print args

Command Line :  python test_6.py -cdl sample (workfine)

utility also pass :  python test_6.py -cdl sample -cdl-sp -cdl-ck

Последние два аргумента для инструмента. В моей программе мне нужно взять образец файла и игнорировать остальные два аргумента без каких-либо ошибок. В текущем коде это дает мне ошибку


person user765443    schedule 10.09.2013    source источник
comment
он должен сказать недействительный выбор: -cdl-sp, если вы хотите избежать этого (что не рекомендуется), взгляните на это, и, возможно, вы сможете проверить, когда произойдет ошибка, и не сработает молча stackoverflow.com/questions/18700634/   -  person    schedule 10.09.2013


Ответы (2)


args, rest = parser.parse_known_args()
print args
print rest

остальное должно равняться

['-cdl-sp', '-cdl-ck']
person hpaulj    schedule 10.09.2013

Вы можете просто добавить параметры для аргументов, которые вам не нужны.

parser.add_argument("-cdl-sp", dest = "sp",  action='store_true')
parser.add_argument("-cdl-sk", dest = "sk",  action='store_true')
person MatthieuW    schedule 10.09.2013
comment
Но он не содержит никакой ценности. Python test_6.py -cdl пример -cdl-sp -cdl-ck - person user765443; 10.09.2013
comment
С action='store_true' синтаксический анализатор не ожидает никакого значения. Вы получите логическое значение true, если есть аргумент, и false, если нет. - person MatthieuW; 10.09.2013
comment
это также верное утверждение, но приведенное выше решение работает лучше для меня. Поскольку я пишу оболочку для инструмента вызова, и некоторые пользователи могут добавить дополнительные параметры, и мне не нужно менять какой-либо код. Но спасибо за ответ - person user765443; 11.09.2013