2012-06-11 13 views
5

Tengo un programa con una gran cantidad de argumentos potenciales. Básicamente, permite al usuario get/set/delete/list cualquier tabla en una base de datos muy pequeña. Cada columna tiene un argumento que se puede pasar.
Esta no es la interfaz principal, solo una interfaz de administrador ocasionalmente útil.¿Cómo combinar mensajes interactivos con argparse en python?

De todos modos, si el usuario desea insertar una fila en una tabla, debe saber el nombre de todas las columnas. Si bien es fácil ver eso con la ayuda, también es un dolor en el trasero.

Por lo tanto, he cambiado el código para que el usuario pueda pasar una opción --prompt y el programa les solicitará cada nombre de columna asociado con la tabla que especificaron. Pero mi problema es que ahora necesito duplicar mis restricciones de entrada (opciones, tipos, etc.) en dos lugares: argparse y esta función de aviso.

  • Pregunta # 1: ¿hay una mejor manera de hacerlo?
  • Pregunta n. ° 2: ¿hay alguna manera clara de hacer referencia a las restricciones de parcelas para este propósito?
  • Pregunta n. ° 3: ¿hay bibliotecas recomendadas como alternativas que combinen argumentos de línea de comando, opciones e indicaciones?

Gracias

Respuesta

3

Una forma típica de hacerlo sería con una acción personalizada. Puede tener la opción argparse y la entrada validada con la misma función como esta.

#!/usr/bin/env python3 

import argparse 


class ColumnsAction(argparse.Action): 
    def __call__(self, parser, namespace, value, option_string=None): 
     self.validate(parser, value) 
     setattr(namespace, self.dest, value) 

    @staticmethod 
    def validate(parser, value): 
     if value not in ('foo', 'bar'): 
      parser.error('{} not valid column'.format(value)) 


parser = argparse.ArgumentParser() 
parser.add_argument('--columns', action=ColumnsAction) 
args = parser.parse_args() 
if args.columns is None: 
    args.columns = input('Enter columns: ') 
    ColumnsAction.validate(parser, args.columns) 
print(args.columns) 
Cuestiones relacionadas