2013-02-16 1 views

ответ

3

получил от этого исходного кода add_argument():

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('-v', '--verbosity', help='more debug info', action='store_true') 
_StoreTrueAction(option_strings=['-v', '--verbosity'], dest='verbosity', nargs=0, const=True, default=False, type=None, choices=None, help='more debug info', metavar=None) 
>>> parser._option_string_actions.keys() 
['-v', '-h', '--verbosity', '--help'] 
>>> 
1

Я пытался решить этот другой день, и я никогда не получил удовлетворительного ответа, кроме следующих на то, что из @vvoody сделал.

In [117]: map(lambda x : x.dest,parser._actions) 
Out[117]: ['help', 'verbosity'] 

Преимущество заключается в том, что он удаляет все псевдоним -v == --verbosity и т.д. НО если вы измените dest для --verbositydest='loud' например, то он возвращает loud, который может или не может быть проблемой.

Кажется очевидной вещью для argsparse, чтобы обеспечить из коробки.

+1

Я думаю, что vvoody's ближе к тому, что мне нужно. Это странно, что нам нужно получить доступ к приватному методу для любой из этих вещей:/ – sfendell

+1

В моем случае я пытался установить параметры по умолчанию для env vars, так что '' $ FOO = bar'' в среде установите dest = foo, будь то '' --foo'' или '' -f'' или что-то еще. Согласовано, что кажется странным использовать частные методы для доступа к данным esp. когда может быть несоответствие между опцией и подсказкой модели intenal от argparse. – sotapme

Смежные вопросы