Argumentos de entrada de usuario y línea de comando

¿Cómo puedo tener un script de Python que pueda aceptar la entrada del usuario y cómo lo hago leer en argumentos si se ejecuta desde la línea de comandos?

Para leer la entrada del usuario puede probar el módulo cmd para crear fácilmente un intérprete de línea de mini-comando (con textos de ayuda y autocompletado) y raw_input ( input para Python 3+) para leer una línea de texto del usuario.

 text = raw_input("prompt") # Python 2 text = input("prompt") # Python 3 

Las entradas de línea de comando están en sys.argv . Prueba esto en tu script:

 import sys print (sys.argv) 

Hay dos módulos para analizar las opciones de línea de comandos: optparse (obsoleto desde Python 2.7, use argparse en argparse lugar) y getopt . Si solo desea ingresar archivos en su secuencia de comandos, fileinput el poder de la fileinput de fileinput .

La referencia de la biblioteca de Python es tu amigo.

 var = raw_input("Please enter something: ") print "you entered", var 

O para Python 3:

 var = input("Please enter something: ") print("You entered " + str(var)) 

raw_input ya no está disponible en Python 3.x. Pero raw_input se renombró como input , por lo que existe la misma funcionalidad.

 input_var = input("Enter something: ") print ("you entered " + input_var) 

Documentación del cambio

La mejor forma de procesar argumentos de línea de comando es el módulo argparse .

Use raw_input() para obtener la entrada del usuario. Si importa el readline module sus usuarios tendrán edición de línea e historial.

Tenga cuidado de no utilizar la función de input , a menos que sepa lo que está haciendo. A diferencia de raw_input , la input aceptará cualquier expresión de python, por lo que es un poco como eval

Use ‘raw_input’ para la entrada desde una consola / terminal.

si solo quieres un argumento de línea de comando como un nombre de archivo o algo, por ejemplo

 $ python my_prog.py file_name.txt 

entonces puedes usar sys.argv …

 import sys print sys.argv 

sys.argv es una lista donde 0 es el nombre del progtwig, por lo que en el ejemplo anterior sys.argv [1] sería “file_name.txt”

Si desea tener opciones de línea de comando completas, use el módulo optparse.

Pev

Este sencillo progtwig lo ayuda a comprender cómo alimentar la entrada del usuario desde la línea de comandos y a mostrar ayuda para pasar un argumento inválido.

 import argparse import sys try: parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) args = parser.parse_args() #print the square of user input from cmd line. print args.square**2 #print all the sys argument passed from cmd line including the program name. print sys.argv #print the second argument passed from cmd line; Note it starts from ZERO print sys.argv[1] except: e = sys.exc_info()[0] print e 

1) Para encontrar la raíz cuadrada de 5

 C:\Users\Desktop>python -i emp.py 5 25 ['emp.py', '5'] 5 

2) Pasar un argumento inválido que no sea el número

 C:\Users\bgh37516\Desktop>python -i emp.py five usage: emp.py [-h] square emp.py: error: argument square: invalid int value: 'five'  

Si está ejecutando Python <2.7, necesita optparse , que, como explica el documento, creará una interfaz para los argumentos de línea de comando a los que se llama cuando se ejecuta la aplicación.

Sin embargo, en Python ≥2.7, optparse ha quedado en desuso y fue reemplazado por argparse como se muestra arriba. Un ejemplo rápido de los documentos …

El siguiente código es un progtwig de Python que toma una lista de enteros y produce la sum o el máximo:

 import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print args.accumulate(args.integers) 

A partir de Python 3.2 2.7, ahora hay argparse para procesar los argumentos de línea de comando.

Si es una versión 3.x, simplemente usa:

 variantname = input() 

Por ejemplo, quieres ingresar 8:

 x = input() 8 

x será igual a 8, pero va a ser una cadena, excepto si lo define de otra manera.

Entonces puedes usar el comando convertir, como:

 a = int(x) * 1.1343 print(round(a, 2)) # '9.07' 9.07 

En Python 2:

 data = raw_input('Enter something: ') print data 

En Python 3:

 data = input('Enter something: ') print(data)