2013-02-16 38 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--verbosity e.g dest='loud'然後返回loud可能會或可能不會是一個問題。

argsparse似乎是一個明顯的事情,提供開箱即用。

+1

我認爲vvoody's更接近我所需要的。有些奇怪的是,我們必須訪問這兩種方法的私有方法:/ – sfendell 2013-02-16 22:36:19

+1

在我的情況下,我試圖將選項設置爲默認env變量,以便環境中的「$ FOO = bar」會設置dest = foo,無論是「--foo」還是「-f」或其他。同意使用私有方法訪問數據esp似乎很奇怪。當選項和內部模型之間可能存在不匹配時,argparse會提供幫助。 – sotapme 2013-02-16 22:41:27