2008-09-16 22 views
335

¿Cómo puedo tener un script de Python que pueda aceptar la entrada del usuario (suponiendo que esto sea posible) y cómo lo hago leer en argumentos si se ejecuta desde la línea de comando?Python: entrada de usuario y argumentos de línea de comando

+6

La respuesta dependerá de la versión de Pitón. Python 3.x hace esto un poco diferente que Python 2.7 – steampowered

+2

Y Python 2.7 también hace esto de una manera un poco diferente que las versiones anteriores a 2.7, p. Ej. 'argparse' en lugar de' optparse'. – HelloGoodbye

Respuesta

275

Para leer la entrada del usuario puede intentar the cmd module para crear fácilmente un intérprete de línea de mini-comando (con textos de ayuda y la terminación automática) y raw_input (input para Python + 3) para la lectura de una línea de texto por parte del usuario.

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

Las entradas de la línea de comandos están en sys.argv. Prueba esto en el script:

import sys 
print (sys.argv) 

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

El Python library reference es tu amigo.

+57

'raw_input' ha cambiado de nombre a' entrada' en Python 3.x - [documentación aquí] (http://docs.python.org/py3k/whatsnew/3.0.html#builtins) – steampowered

+1

Mi favorito fuente para esto: http://www.tutorialspoint.com/python/python_command_line_arguments.htm y esto se ve bien también: http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/ –

+0

sys.argv debe suministrarse con el número de argumento, si supone que pasa un parámetro como un valor, por ejemplo. python nombre_de_archivo.py 2017-02-10 y desea utilizar la fecha, debe ser sys.argv [1] de lo contrario será una lista como [nombre_de_archivo.py, 2017-02-10] –

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

O para Python 3:

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

Debe tenerse en cuenta que no tiene que importar 'raw_input', es una función incorporada. –

+1

No tiene que usar str() en la concatenación de impresión ya que todos los datos ingresados ​​serán de tipo str (ing) por defecto (números pares). – Goujon

29

La mejor manera de procesar los argumentos de línea de comandos es la argparse module.

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

+0

readline solo disponible en Unix de fábrica. –

+4

argparse es la nueva optparse –

7

Use 'raw_input' para la entrada desde una consola/terminal.

si solo quiere un argumento de línea de comando como un nombre de archivo o algo por el estilo.

$ python my_prog.py file_name.txt 

entonces puede utilizar 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 de línea de comando completas, use el módulo optparse.

Pev

14

cuidado de no utilizar la función de input, a menos que sepa lo que está haciendo. A diferencia de raw_input, input aceptará ninguna expresión de Python, así que es un poco como eval

6

A partir de Python 3.2 2.7, ahora hay argparse para el procesamiento de argumentos de línea de comandos.

+1

argparse también ha sido backported y está disponible en PyPi http://pypi.python.org/pypi/argparse/1.2.1 –

193

raw_input ya no está disponible en Python 3.x. Pero raw_input pasó a llamarse input, por lo que existe la misma funcionalidad.

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

Documentation of the change

+23

En Python 2.7, input() no convierte valores en cadenas. Por lo tanto, si intenta hacer esto: input_variable1 = input ("Introduzca la primera palabra o frase:"), obtendrá un error: Traceback (última llamada más reciente): return eval (raw_input (prompt)) Archivo "", línea 1, en NameError: el nombre 'malo' no está definido –

+0

input_var = input ("Presione 'E' y 'Enter' para Salir:") NameError: el nombre 'e' no está definido I Estoy usando Python 2.5. ¿Cómo puedo superar este error? –

+0

puede evitar el aviso Rastreo usando la siguiente importación que viene con Python 2.7: 'importación fileinput resultado = [] para la línea en fileinput.input(): \t result.append (línea)' –

8

Si está ejecutando Python < 2.7, es necesario optparse, que como el documento explica creará una interfaz para los argumentos de línea de comandos que se llaman 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 ...

The following code is a Python program that takes a list of integers and produces either the sum or the max:

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) 
8

Este sencillo programa que ayuda en la comprensión de cómo alimentar a la entrada del usuario desde la línea de comandos y para mostrar ayuda en el paso del argumento vá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 hallar la raíz cuadrada de 5

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

2) Pasando argumento no válido distinto al número de

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'> 
4

Si se trata de una versión 3.x a continuación, utilizar simplemente:

variantname = input() 

Por ejemplo, yo desea ingresar 8:

x = input() 
8 

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

lo que puede utilizar el comando de conversión, como:

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

En Python 2:

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

En Python 3:

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