Это приблизительно то, что вы хотите, пропавших без вести, кроме «-»
p.add_argument('action',choices=['decode','encode'],default='decode',nargs='?')
p.add_argument('astring')
In [8]: p.parse_args(["a string"])
Out[8]: Namespace(action='decode', astring='a string')
In [9]: p.parse_args(['decode',"a string"])
Out[9]: Namespace(action='decode', astring='a string')
In [10]: p.parse_args(['encode',"a string"])
Out[10]: Namespace(action='encode', astring='a string')
Если вы должны иметь «-», решение nneonneo в порядке, производя те же пространства имен. Оба аргумента записываются в один и тот же атрибут назначения, и этот атрибут по умолчанию является «декодировать».
p.add_argument('--decode', dest='action', action='store_const', const='decode', default='decode')
p.add_argument('--encode', dest='action', action='store_const', const='encode')
Если вы не используете взаимоисключающие группы, последний аргумент будет иметь последнее слово ('--decode --encode "a string to be encoded"'
)
Что вы имеете в виду под «сделать' -decode' по умолчанию»? Вы не применяете аргументы по умолчанию, вы указываете атрибуты в значениях по умолчанию для пространства имен. Как вы хотите, чтобы пространство имен выглядело? Это то, что вы будете обрабатывать с остальной частью вашего кода. – hpaulj