Как мне получить optparse список всех возможных аргументов и опций? - PullRequest
3 голосов
/ 20 августа 2011

Я использую 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 и могу выяснить это, используя внутренние атрибуты, но это не кажется кошерным. Какой правильный способ сделать это?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 августа 2011
>>> 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']
1 голос
/ 07 октября 2013

Я получил отличный совет от Преобразовать строковое представление словаря в словарь? , используя 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']

Это гораздо более переносимо, чем при использовании частных методов, и вы можете использовать совершенно новый модуль.

...