Input dell’utente e argomenti della riga di comando

Come posso avere uno script Python in grado di accettare l’input dell’utente e come posso farlo leggere negli argomenti se eseguito dalla riga di comando?

Per leggere l’input dell’utente, puoi provare il modulo cmd per creare facilmente un interprete di riga mini-comando (con testi di aiuto e completamento automatico) e raw_input ( input per Python 3+) per leggere una riga di testo dall’utente.

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

Gli input da riga di comando sono in sys.argv . Prova questo nel tuo script:

 import sys print (sys.argv) 

Ci sono due moduli per l’analisi delle opzioni da riga di comando: optparse (deprecato da Python 2.7, usa invece argparse ) e getopt . Se si desidera semplicemente inserire i file nel proprio script, vedere la potenza del fileinput .

Il riferimento alla libreria Python è tuo amico.

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

Oppure per Python 3:

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

raw_input non è più disponibile in Python 3.x. Ma raw_input stato rinominato come input , quindi esiste la stessa funzionalità.

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

Documentazione del cambiamento

Il modo migliore per elaborare gli argomenti della riga di comando è il modulo argparse .

Usa raw_input() per ottenere l’input dell’utente. Se readline module gli utenti avranno la modifica e la cronologia delle linee.

Attento a non usare la funzione di input , a meno che tu non sappia cosa stai facendo. A differenza di raw_input , input accetta qualsiasi espressione python, quindi è un po ‘come eval

Usa ‘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

 $ python my_prog.py file_name.txt 

allora puoi usare sys.argv …

 import sys print sys.argv 

sys.argv è una lista dove 0 è il nome del programma, quindi nell’esempio sopra sys.argv [1] sarebbe “file_name.txt”

Se vuoi avere pieno sulle opzioni della riga di comando usa il modulo optparse.

PEV

Questo semplice programma ti aiuta a capire come alimentare l’input dell’utente dalla riga di comando e mostrare aiuto per passare 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) Passando 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'  

Se stai eseguendo Python <2.7, hai bisogno di optparse , che come spiega il doc creerà un'interfaccia per gli argomenti della riga di comando che vengono chiamati quando viene eseguita l'applicazione.

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

Il seguente codice è un programma Python che prende una lista di numeri interi e produce la sum 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) 

A partire da Python 3.2 2.7, ora c’è argparse per l’elaborazione degli argomenti della riga di comando.

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 la definisci diversamente.

Quindi puoi usare il comando convert, come:

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

In Python 2:

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

In Python 3:

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