Paso de parámetros a programas en python / How to pass parameters to a python program


Para pasar parámetros a los programas se usa el módulo getopt, que nos permite trabajar cómodamente con ellos.

En primer lugar tenemos que saber que el contenido de la línea de comandos nos viene en forma de lista en sys.argv.

Si invocamos un programa en python, como parámetros nos interesará todo lo que venga después de la primera posición, es decir sys.argv[1:], así que en general llamaremos a una función main así
if __name__=='__main__':
main(sys.argv[1:])

Ahora veremos el funcionamiento de getopt, os paso un ejemplo:
def main(argv): 
try:
opts, args = getopt.getopt(argv, "hps:",
["help", "prn", "server="])
except getopt.GetoptError:
print "Opcion no valida"
usage()
sys.exit(2)

Vemos que getopt toma tres argumentos:

  1. El primero es la cadena que le pasamos para analizar
  2. El segundo son las opciones en forma corta, las que se usan con la sintaxis -h, -p, -s="algo"
  3. El tercero son las mismas opciones pero en forma larga que se usan con dos guiones --help, --prn, --server="algo"
Observamos que las opciones en forma corta seguidas de dos puntos o en forma larga seguidas del símbolo igual esperan que les pasemos un argumento. Getopt se encarga de que si al programa le pasamos alguna opción que no esté en la lista salte la excepción GetoptError.

Como ahora ya tenemos las opciones y sus posibles valores, el tratamiento será algo similar a esto
for opt, arg in opts:                
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ('-p', "--prn"):
p_pantalla=True
elif opt in ("-s", "--server"):
r_server=arg

Si hay algún tipo de error durante el parseado de los argumentos, es una buena idea dar una ayuda al usuario antes de terminar el programa, por ejemplo
def usage():
print """
Opcions:
--help (-h)\t\tTreu aquesta ajuda
--prn (-p)\t\tTreu impressio de tickets per pantalla
--server (-s)\t\tServidor actualització
"""


Y esto es todo por hoy