-
Cómo construir un analizador en Python
-
En Python, como en muchos otros idiomas, es necesario manejar la entrada del usuario a un programa lanzado desde la línea de comandos. La biblioteca "sys" Python contiene un mayor número de parámetros específicos del sistema, incluyendo las funciones necesarias para manejar argumentos de la línea de comandos. La biblioteca de Python "getopt" proporciona un método útil para analizar un gran número de argumentos de línea de comandos y banderas en diferentes formatos.Preparar
Abra un editor de texto y comenzar a escribir un nuevo documento de Python. Formatear el programa de la siguiente manera. La biblioteca "sys" contiene funciones para el manejo de variables de argumentos. Va a despojar sys.argv [0], ya que es el nombre del script, en este caso "my_program.py." La verificación "nombre" se asegura de que la secuencia de comandos se llama desde la línea de comandos, en lugar de otro programa.
my_program.py
getopt importación, sysdef main (argv):
analizador argumento irá aquí
si el nombre == "principal":
principal (sys.argv [1:])usando Getopt
Llame a la función ") (getopt.getopt" desde dentro de su función "main ()" con la siguiente sintaxis. Para este ejemplo, los argumentos de "my_program.py" incluyen una bandera "-v" para la salida detallada, una bandera "h" o "help" para imprimir el uso, y una "i" o "--input "para especificar un archivo de entrada.
def main (argv):
tratar:opts, args = getopt.getopt(argv, "hi:v", ["help", "input"]);
excepto: a excepción getopt.GetoptError, err:
print str(err); #print error
Configurar valores predeterminados
usage(); #User-written function to print appropriate usage of program
sys.exit(2);verbosa = false;
archivo_entrada = Ninguna;
para o, en una apuesta:if o in ("-h", "--help"):
usage(); sys.exit();
elif o == "-v":
verbose = True;
elif o in ("-i", "--input"):
input_file = a;
else:
assert False, "Unknown argument."si (archivo_entrada == Ninguno):
print "No input file given.";
usage(); sys.exit(2);usando Argparser
La biblioteca "argparser" proporciona una forma similar de análisis de argumentos con menos código y mensajes de error más detallados.
argpase importación, sys
def main ():
analizador = argparse.ArgumentParser ()
parser.add_argument ( '- i', '- de entrada', dest = 'archivo_entrada', type = str, ayuda = "Archivo de entrada")
parser.add_argument ( '- h', '- help')
parser.add_argument ( '- v', dest = 'detallado', action = 'store_true')
args = parser.parse_args ()El código para comprobar la validez de los argumentos
consideraciones
Si está preparando su programa de Python para la distribución, es importante para manejar todos los posibles escenarios de uso en la comprobación de argumentos de entrada. Por ejemplo, un nombre de archivo deben ser evaluados para determinar si se vincula a un archivo del formato adecuado. Otras variables deben ser evaluados para determinar que su valor ha significado dentro del programa.