it-swarm-es.tech

Argumentos de entrada de usuario y línea de comando

¿Cómo tengo una secuencia de comandos de Python que a) puede aceptar la entrada del usuario y cómo puedo hacer que b) lea los argumentos si se ejecuta desde la línea de comandos?

465
Teifion

Para leer los comentarios del usuario, puede probar el módulo cmd para crear fácilmente un mini intérprete de línea de comandos (con textos de ayuda y autocompletar) y raw_input ( input para Python 3+) para leer un Línea de texto 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 tu guión:

import sys
print (sys.argv)

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

La referencia de la biblioteca Python es tu amigo.

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

O para Python 3:

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

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

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

Documentación del cambio

201
steampowered

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

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

31
Dave Webb

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

18
Vhaerun

Este sencillo programa lo ayuda a comprender cómo alimentar la entrada del usuario desde la línea de comandos y mostrar ayuda para pasar un argumento no 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) Encontrar la raíz cuadrada de 5.

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

2) Pasar argumento no válido distinto del 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'>
13
Viswesn

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 ej.

$ 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

10
Simon Peverett

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

Sin embargo, en Python ≥2.7, optparse ha quedado en desuso, y fue reemplazado por argparse como se muestra arriba. Un rápido ejemplo de la documentación ...

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)
9
Matt Olan

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

variantname = input()

Por ejemplo, desea introducir 8:

x = input()
8

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

Así que puedes usar el comando de conversión, como:

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

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

6
GreenMatt

En Python 2:

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

En Python 3:

data = input('Enter something: ')
print(data)
2
Mark
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
1
Will Charlton