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?

¿Fue útil?

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: optparse (en desuso desde Python 2.7, use 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) 

Documentación del cambio.

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? "))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top