2011-08-19 51 views
3

我正在使用Python 2.6.2(不幸的是無法升級到2.7,或者我會使用argparse)。我如何獲得optparse返回通過'add_option'添加的選項列表?如何獲得optparse列出所有可能的參數和選項?

下面是一些示例代碼:

from optparse import OptionParser 
parser = OptionParser() 
parser.add_option('--one') 
parser.add_option('--two') 
(opts,args) = parser.parser_args() 

optlist = parser.funcToGetListOfOptions() 
print optlist 
['one', 'two'] 

我已經通過optparse源望去,可以通過訪問內部屬性看着辦吧,但似乎並不十分潔淨。什麼是正確的方法來做到這一點?

謝謝!

回答

3
>>> parser._get_all_options()[1:] 
[<Option at 0xb7d185ec: --one>, <Option at 0xb7d1866c: --two>] 
>>> [x.get_opt_string() for x in parser._get_all_options()[1:]] 
['--one', '--two'] 
>>> [x.dest for x in parser._get_all_options()[1:]] 
['one', 'two'] 
+0

謝謝,F.J.我猜想,因爲optparse不再被開發,訪問被命名的屬性是足夠安全的,以表明它們是_private。 – Craig

1

我有一個很好的提示,從Convert a String representation of a Dictionary to a dictionary?,使用ast.literal_eval,這是我以前從未使用過。有了它,直接從(options, args) = parser.parse_args中的選項中撥打電話str,您將很快得到您想要的。

>>> import ast 
>>> ast.literal_eval(options.__str__()) 
{'one': None, 'two': None} 
>>> ast.literal_eval(options.__str__()).keys() 
['one', 'two'] 

這是使用私有方法更容易移植,並且您可以使用一個全新的模塊。