Input dell'utente e argomenti della riga di comando [chiuso]


525

Come posso avere uno script Python che a) possa accettare l'input dell'utente e come posso farlo b) leggere negli argomenti se eseguito dalla riga di comando?


9
La risposta dipenderà dalla tua versione di Python. Python 3.x lo fa in modo leggermente diverso rispetto a Python 2.7
vapore il

4
E Python 2.7 lo fa anche in modo leggermente diverso rispetto alle versioni precedenti alla 2.7, ad es. argparseAnziché optparse.
Ciao addio

Risposte:


501

Per leggere l'input dell'utente puoi provare il cmdmodulo per creare facilmente un mini interprete da riga di comando (con testi di aiuto e completamento automatico) e raw_input( inputper Python 3+) per leggere una riga di testo dall'utente.

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

Sono presenti gli input della riga di comando sys.argv. Prova questo nel tuo script:

import sys
print (sys.argv)

Esistono due moduli per l'analisi delle opzioni della riga di comando: optparse(obsoleto da Python 2.7, utilizzare argparseinvece) e getopt. Se vuoi solo inserire file nel tuo script, osserva il potere di fileinput.

Il riferimento alla libreria Python è tuo amico.


71
raw_inputè stato rinominato inputin Python 3.x - documentazione qui
potenziato a vapore il


1
sys.argv deve essere fornito con il numero argomento, se si suppone che si passi un parametro come valore es. python nome_file.py 2017-02-10 e vuoi usare la data, dovrebbe essere sys.argv [1] altrimenti sarà un elenco come [nome_file.py, 2017-02-10]
Aravind Krishnakumar

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

O per Python 3:

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

26
Va notato che non è necessario importare raw_input, è una funzione integrata.
Dennis Golomazov,

7
Non è necessario utilizzare str () nella concatenazione di stampa poiché tutti i dati immessi saranno di tipo str (ing) per impostazione predefinita (numeri pari).
Goujon,

202

raw_inputnon è più disponibile in Python 3.x. Ma è raw_inputstato rinominato input, quindi esiste la stessa funzionalità.

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

Documentazione della modifica


24
In Python 2.7, input () non converte i valori in stringhe. Quindi se provi a fare questo: input_variable1 = input ("Inserisci la prima parola o frase:"), otterrai un errore: Traceback (ultima chiamata più recente): return eval (raw_input (prompt)) File "<string> ", riga 1, in <modulo> NameError: il nome 'bad' non è definito
IgorGanapolsky

input_var = input ("Premi 'E' e 'Enter' per uscire:") NameError: il nome 'e' non è definito Sto usando Python 2.5. Come posso superare questo errore.
Deepak Dubey

Puoi evitare l'avviso Traceback usando la seguente importazione fornita con Python 2.7:import fileinput result=[] for line in fileinput.input(): result.append(line)
Stefan Gruenwald

Ecco più della storia e della logica: python.org/dev/peps/pep-3111
Julian


18

Attento a non usare la inputfunzione, a meno che tu non sappia cosa stai facendo. A differenza di raw_input, inputaccetterà qualsiasi espressione di pitone, quindi è un po 'comeeval


15

Questo semplice programma ti aiuta a capire come alimentare l'input dell'utente dalla riga di comando e a mostrare aiuto nel passaggio di argomenti non validi.

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) Per trovare la radice quadrata di 5

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

2) Passaggio di argomenti non validi diversi dal numero

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

10

Utilizzare 'raw_input' per l'input da una console / terminale.

se vuoi solo un argomento da riga di comando come un nome di file o qualcosa di simile ad es

$ python my_prog.py file_name.txt

allora puoi usare sys.argv ...

import sys
print sys.argv

sys.argv è un elenco in cui 0 è il nome del programma, quindi nell'esempio sopra sys.argv [1] sarebbe "nome_file.txt"

Se si desidera disporre di opzioni complete sulla riga di comando, utilizzare il modulo optparse.

PEV


9

Se si esegue Python <2.7, è necessario optparse , che come spiega il documento creerà un'interfaccia per gli argomenti della riga di comando che vengono chiamati quando l'applicazione viene eseguita.

Tuttavia, in Python ≥2.7, optparse è stato deprecato ed è stato sostituito con argparse come mostrato sopra. Un rapido esempio dai documenti ...

Il codice seguente è un programma Python che accetta un elenco di numeri interi e produce la somma o il massimo:

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)


6

Se è una versione 3.x, basta semplicemente usare:

variantname = input()

Ad esempio, si desidera inserire 8:

x = input()
8

x sarà uguale a 8 ma sarà una stringa tranne se diversamente definito.

Quindi puoi usare il comando convert, come:

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

3

In Python 2:

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

In Python 3:

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

2
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.