Entrada del usuario y argumentos de la línea de comando
-
09-06-2019 - |
Pregunta
¿Cómo tengo un script de Python que a) puede aceptar entradas del usuario y cómo hago para que b) lea argumentos si se ejecuta desde la línea de comandos?
Solución
Para leer la entrada del usuario, puedes intentar el cmd
módulo para crear fácilmente un mini intérprete de línea de comandos (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 la línea de comando están en sys.argv
.Pruebe esto en su script:
import sys
print (sys.argv)
Hay dos módulos para analizar las opciones de la línea de comandos: (en desuso desde Python 2.7, use optparse
argparse
en su lugar) y getopt
.Si solo desea ingresar archivos a su secuencia de comandos, observe el poder de fileinput
.
El Referencia de la biblioteca de Python es tu amigo.
Otros consejos
var = raw_input("Please enter something: ")
print "you entered", var
O para Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
ya no está disponible en Python 3.x.Pero raw_input
fue renombrado input
, por lo que existe la misma funcionalidad.
input_var = input("Enter something: ")
print ("you entered " + input_var)
La mejor manera de procesar los argumentos de la línea de comando es argparse
módulo.
Usar raw_input()
para obtener la entrada del usuario.Si importas el readline module
sus usuarios tendrán edición de líneas e historial.
Tenga cuidado de no utilizar el input
funcionar, a menos que sepas lo que estás haciendo.A diferencia de raw_input
, input
aceptará cualquier expresión de Python, por lo que es algo así como eval
Este sencillo programa le ayuda a comprender cómo alimentar la entrada del usuario desde la línea de comandos y mostrar ayuda para pasar argumentos no válidos.
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 no vá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'
<type 'exceptions.SystemExit'>
Utilice 'raw_input' para la entrada desde una consola/terminal.
si solo desea un argumento de línea de comando como un nombre de archivo o algo así, 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 programa, por lo que en el ejemplo anterior sys.argv[1] sería "file_name.txt"
Si desea tener opciones completas en la línea de comando, use el módulo optparse.
pev
Si está ejecutando Python <2.7, necesita optar por analizar, que como explica el documento creará una interfaz para los argumentos de la línea de comando que se llaman cuando se ejecuta su aplicación.
Sin embargo, en Python ≥2.7, optparse ha quedado obsoleto y fue reemplazado por el analizar argumentos como se muestra arriba.Un ejemplo rápido de los documentos...
El siguiente código es un programa de Python que toma una lista de enteros y produce la suma 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 analizar argumentos para procesar argumentos de línea de comando.
Si es una versión 3.x, simplemente use:
variantname = input()
Por ejemplo, desea ingresar 8:
x = input()
8
x será igual a 8 pero será una cadena, excepto si la defines 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)
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))