it-swarm.it

Input dell'utente e argomenti della riga di comando

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

465
Teifion

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 argparse invece) e getopt . Se vuoi semplicemente inserire i file nel tuo script, vedi la potenza di fileinput .

Il riferimento alla libreria Python è tuo amico.

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

Oppure per Python 3:

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

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

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

Documentazione della modifica

201
steampowered

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

Usa raw_input() per ottenere l'input dell'utente. Se importi il ​​ readline module i tuoi utenti avranno la modifica e la cronologia delle linee.

31
Dave Webb

Attento a non utilizzare la funzione 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

18
Vhaerun

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'
<type 'exceptions.SystemExit'>
13
Viswesn

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, ad es.

$ python my_prog.py file_name.txt

allora puoi usare sys.argv ...

import sys
print sys.argv

sys.argv è una lista in cui 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

10
Simon Peverett

Se stai usando 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 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 seguente codice è un programma Python che prende una lista 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)
9
Matt Olan

Se è una versione 3.x, usa semplicemente:

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
6
CorpseDead

A partire da Python 3.2 2.7, c'è ora argparse per elaborare gli argomenti della riga di comando.

6
GreenMatt

In Python 2:

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

In 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