¿Cómo tengo un script de Python que a) puede aceptar la entrada del usuario y cómo lo hago b) leer en argumentos si se ejecuta desde la línea de comandos?
argparse
lugar de optparse
.
¿Cómo tengo un script de Python que a) puede aceptar la entrada del usuario y cómo lo hago b) leer en argumentos si se ejecuta desde la línea de comandos?
argparse
lugar de optparse
.
Respuestas:
Para leer la entrada del usuario, puede probar el cmd
módulo para crear fácilmente un mini intérprete de línea de 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 la línea de comando están adentro sys.argv
. Prueba esto en tu 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 script, contemple el poder 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: " + var)
raw_input
, es una función integrada.
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)
import fileinput result=[] for line in fileinput.input(): result.append(line)
La mejor manera de procesar argumentos de línea de comandos es el argparse
módulo.
Use raw_input()
para obtener la entrada del usuario. Si importa, readline module
sus usuarios tendrán edición de línea e historial.
Este sencillo programa le ayuda a comprender cómo alimentar la entrada del usuario desde la línea de comandos y mostrar ayuda al 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 argumento inválido que no sea 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'>
Use '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 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 comandos, use el módulo optparse.
Pev
Si está ejecutando Python <2.7, necesita optparse , que como explica el documento creará una interfaz para los argumentos de la línea de comandos que se invocan cuando se ejecuta su aplicación.
Sin embargo, en Python ≥2.7, optparse ha quedado en desuso y se reemplazó con el argumento arg 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.22.7, ahora hay argumentos para procesar los argumentos de la línea de comandos.
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 define de otra manera.
Para que pueda usar el comando de conversión, como:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))