2011-08-19 1 views
3

J'utilise Python 2.6.2 (malheureusement je ne peux pas passer à la version 2.7, ou j'utiliserais argparse). Comment puis-je obtenir optparse pour retourner une liste des options qui ont été ajoutées via 'add_option'?Comment puis-je obtenir la liste optparse de tous les arguments et options possibles?

Voici quelques exemples de code:

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'] 

Je l'ai regardé à travers la source optparse et peut le comprendre en accédant à des attributs internes, mais cela ne semble pas très casher. Quelle est la bonne façon de faire cela?

Merci!

Répondre

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

Merci, F.J. Je suppose que puisque optparse n'est plus en développement, il est suffisamment sûr pour accéder aux attributs nommés pour indiquer qu'ils sont _private. – Craig

1

j'ai eu un soupçon de Convert a String representation of a Dictionary to a dictionary?, en utilisant ast.literal_eval, que je ne l'ai jamais utilisé auparavant. Avec cela, et en appelant str directement à partir des options dans (options, args) = parser.parse_args, vous obtiendrez ce que vous voulez assez rapidement.

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

Ceci est beaucoup plus portable, puis en utilisant des méthodes privées, et vous obtenez d'utiliser un tout nouveau module.

Questions connexes