argumentparser - Lista de Python Optparse
arguments parser python (4)
Estoy usando el módulo python optparse en mi programa, y tengo problemas para encontrar una manera fácil de analizar una opción que contiene una lista de valores.
Por ejemplo:
--groups one,two,three.
Me gustaría poder acceder a estos valores en un formato de lista como options.groups[]
. ¿Hay una opción optparse para convertir valores separados por comas en una lista? ¿O tengo que hacer esto manualmente?
La respuesta de S.Lott ya ha sido aceptada, pero aquí hay una muestra de código para los archivos:
def foo_callback(option, opt, value, parser):
setattr(parser.values, option.dest, value.split('',''))
parser = OptionParser()
parser.add_option(''-f'', ''--foo'',
type=''string'',
action=''callback'',
callback=foo_callback)
Mira las opciones de devolución de llamada . Su función de devolución de llamada puede analizar el valor en una lista usando un optarg.split('','')
básico
Con optparse, para obtener un valor de lista puede usar la acción '' append '':
from optparse import OptionParser parser = OptionParser() parser.add_option("--group", action="append", dest="my_groups") (options, args) = parser.parse_args() print options.my_groups
Luego llame a su programa de esta manera:
$ python demo.py --grupo uno --grupo dos --grupo tres
[''uno dos tres'']
De nuevo, solo por la integridad del archivo, expandiendo el ejemplo anterior:
- Todavía puede usar "dest" para especificar el nombre de la opción para un acceso posterior
- Los valores predeterminados no se pueden usar en tales casos (ver explicación en Desencadenar devolución de llamada en el valor predeterminado en optparse )
- Si desea validar la entrada, OptionValueError debe arrojarse desde foo_callback
El código (con pequeños cambios) sería entonces:
def get_comma_separated_args(option, opt, value, parser):
setattr(parser.values, option.dest, value.split('',''))
parser = OptionParser()
parser.add_option(''-f'', ''--foo'',
type=''string'',
action=''callback'',
callback=get_comma_separated_args,
dest = foo_args_list)