3

我正在使用 Python 2.6.2(不幸的是无法升级到 2.7,或者我会使用 argparse)。如何让 optparse 返回已通过“add_option”添加的选项列表?

这是一些示例代码:

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 回答