Código fuente: Lib / getopt.py
Nota
los getopt
El módulo es un analizador de opciones de línea de comandos cuya API está diseñada para ser familiar para los usuarios de C getopt()
función. Los usuarios que no están familiarizados con la C getopt()
función o que le gustaría escribir menos código y obtener una mejor ayuda y mensajes de error debería considerar el uso de la argparse
módulo en su lugar.
Este módulo ayuda a los scripts a analizar los argumentos de la línea de comandos en sys.argv
. Es compatible con las mismas convenciones que Unix. getopt()
función (incluidos los significados especiales de los argumentos de la forma ‘-
‘ y ‘--
‘). También se pueden usar opciones largas similares a las que admite el software GNU a través de un tercer argumento opcional.
Este módulo proporciona dos funciones y una excepción:
-
getopt.getopt(args, shortopts, longopts=[])
-
Analiza las opciones de la línea de comandos y la lista de parámetros. argumentos es la lista de argumentos que se analizará, sin la referencia principal al programa en ejecución. Normalmente, esto significa
sys.argv[1:]
. shortopts es la cadena de letras de opciones que el script quiere reconocer, con opciones que requieren un argumento seguido de dos puntos (':'
; es decir, el mismo formato que Unixgetopt()
usos).Nota
A diferencia de GNU
getopt()
, después de un argumento de no opción, todos los demás argumentos se consideran también no opciones. Esto es similar a la forma en que funcionan los sistemas Unix que no son GNU.Longopts, si se especifica, debe ser una lista de cadenas con los nombres de las opciones largas que deben ser compatibles. El líder
'--'
los caracteres no deben incluirse en el nombre de la opción. Las opciones largas que requieren un argumento deben ir seguidas de un signo igual ('='
). No se admiten argumentos opcionales. Para aceptar solo opciones largas, shortopts debe ser una cadena vacía. Las opciones largas en la línea de comandos se pueden reconocer siempre que proporcionen un prefijo del nombre de la opción que coincida exactamente con una de las opciones aceptadas. Por ejemplo, si Longopts es['foo', 'frob']
, la opción--fo
coincidirá como--foo
, pero--f
no coincidirá de forma única, por lo queGetoptError
se levantará.El valor de retorno consta de dos elementos: el primero es una lista de
(option,
pares el segundo es la lista de argumentos del programa que quedan después de que se eliminó la lista de opciones (este es un segmento final de argumentos). Cada par de opción y valor devuelto tiene la opción como primer elemento, precedida de un guión para las opciones cortas (p. Ej.,
value)'-x'
) o dos guiones para opciones largas (p. ej.,'--long-option'
) y el argumento de la opción como segundo elemento, o una cadena vacía si la opción no tiene ningún argumento. Las opciones aparecen en la lista en el mismo orden en que se encontraron, lo que permite múltiples apariciones. Se pueden mezclar opciones largas y cortas.
-
getopt.gnu_getopt(args, shortopts, longopts=[])
-
Esta función funciona como
getopt()
, excepto que el modo de escaneo estilo GNU se usa por defecto. Esto significa que los argumentos de opción y no opción pueden estar mezclados. losgetopt()
La función detiene el procesamiento de opciones tan pronto como se encuentra un argumento que no es de opción.Si el primer carácter de la cadena de opciones es
'+'
, o si la variable de entornoPOSIXLY_CORRECT
se establece, el procesamiento de opciones se detiene tan pronto como se encuentra un argumento que no es de opción.
-
exception getopt.GetoptError
-
Esto se genera cuando se encuentra una opción no reconocida en la lista de argumentos o cuando una opción que requiere un argumento no tiene ninguno. El argumento de la excepción es una cadena que indica la causa del error. Para opciones largas, un argumento dado a una opción que no requiere uno también hará que se genere esta excepción. Los atributos
msg
yopt
dar el mensaje de error y la opción relacionada; si no hay una opción específica a la que se refiere la excepción,opt
es una cadena vacía.
-
exception getopt.error
-
Alias para
GetoptError
; para compatibilidad con versiones anteriores.
Un ejemplo que usa solo opciones de estilo Unix:
>>> import getopt >>> args = '-a -b -cfoo -d bar a1 a2'.split() >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] >>> optlist, args = getopt.getopt(args, 'abc:d:') >>> optlist [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] >>> args ['a1', 'a2']
Usar nombres de opciones largos es igualmente fácil:
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' >>> args = s.split() >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] >>> optlist, args = getopt.getopt(args, 'x', [ ... 'condition=', 'output-file=", "testing']) >>> optlist [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')] >>> args ['a1', 'a2']
En un script, el uso típico es algo como esto:
import getopt, sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) except getopt.GetoptError as err: # print help information and exit: print(err) # will print something like "option -a not recognized" usage() sys.exit(2) output = None verbose = False for o, a in opts: if o == "-v": verbose = True elif o in ("-h", "--help"): usage() sys.exit() elif o in ("-o", "--output"): output = a else: assert False, "unhandled option" # ... if __name__ == "__main__": main()
Tenga en cuenta que se podría producir una interfaz de línea de comando equivalente con menos código y más ayuda informativa y mensajes de error utilizando el argparse
módulo:
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-o', '--output') parser.add_argument('-v', dest='verbose', action='store_true') args = parser.parse_args() # ... do something with args.output ... # ... do something with args.verbose ..
Ver también
-
Module
argparse
-
Opción de línea de comando alternativa y biblioteca de análisis de argumentos.