3

私はPython2.6.2を使用しています(残念ながら2.7にアップグレードできないか、argparseを使用します)。'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ソースを調べて、内部属性にアクセスすることでそれを理解できますが、それはあまりコーシャではないようです。これを行う正しい方法は何ですか?

ありがとう!

4

2 に答える 2

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']
于 2011-08-19T22:15:30.120 に答える
1

辞書の文字列表現を辞書に変換することから素晴らしいヒントを得ましたか?、これまで使用したことのないast.literal_evalを使用します。これにより、のオプションから直接strを呼び出すと(options, args) = parser.parse_args、必要なものをすばやく取得できます。

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

これは、プライベートメソッドを使用するよりもはるかに移植性が高く、まったく新しいモジュールを使用できるようになります。

于 2013-10-07T01:59:29.577 に答える