Python 3 - Argumentos de la línea de comandos
Python proporciona una getopt módulo que le ayuda a analizar opciones y argumentos de la línea de comandos.
$ python test.py arg1 arg2 arg3
El pitón sys El módulo proporciona acceso a cualquier argumento de la línea de comandos a través del sys.argv. Esto tiene dos propósitos:
sys.argv es la lista de argumentos de la línea de comandos.
len(sys.argv) es el número de argumentos de la línea de comandos.
Aquí sys.argv [0] es el programa, es decir. el nombre del guión.
Ejemplo
Considere el siguiente guión test.py -
#!/usr/bin/python3
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
Ahora ejecute el script anterior de la siguiente manera:
$ python test.py arg1 arg2 arg3
Esto produce el siguiente resultado:
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
NOTE - Como se mencionó anteriormente, el primer argumento es siempre el nombre del script y también se cuenta en número de argumentos.
Análisis de argumentos de la línea de comandos
Python proporcionó un getoptmódulo que le ayuda a analizar opciones y argumentos de la línea de comandos. Este módulo proporciona dos funciones y una excepción para habilitar el análisis de argumentos de la línea de comandos.
método getopt.getopt
Este método analiza las opciones de la línea de comandos y la lista de parámetros. A continuación se muestra una sintaxis simple para este método:
getopt.getopt(args, options, [long_options])
Aquí está el detalle de los parámetros:
args - Esta es la lista de argumentos a analizar.
options - Esta es la cadena de letras de opciones que el script quiere reconocer, con opciones que requieren un argumento deben ir seguidas de dos puntos (:).
long_options- Este es un parámetro opcional y, si se especifica, debe ser una lista de cadenas con los nombres de las opciones largas, que deben ser compatibles. Las opciones largas, que requieren un argumento, deben ir seguidas de un signo igual ('='). Para aceptar solo opciones largas, las opciones deben ser una cadena vacía.
Este método devuelve un valor que consta de dos elementos: el primero es una lista de (option, value) pares, el segundo es una lista de argumentos de programa que quedan después de eliminar la lista de opciones.
Cada par de opción y valor devuelto tiene la opción como primer elemento, precedida de un guión para opciones cortas (por ejemplo, '-x') o dos guiones para opciones largas (por ejemplo, '- opción larga').
Excepción 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 se da ninguno.
El argumento de la excepción es una cadena que indica la causa del error. Los atributosmsg y opt dar el mensaje de error y la opción relacionada.
Ejemplo
Supongamos que queremos pasar dos nombres de archivo a través de la línea de comandos y también queremos dar una opción para verificar el uso del script. El uso del script es el siguiente:
usage: test.py -i <inputfile> -o <outputfile>
Aquí está el siguiente script para test.py:
#!/usr/bin/python3
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print ('Input file is "', inputfile)
print ('Output file is "', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])
Salida
Ahora, ejecute el script anterior de la siguiente manera:
$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i inputfile -o outputfile
Input file is " inputfile
Output file is " outputfile