2011-01-21 4 views
5

Attualmente sto passando per Learn Python The Hard Way. Penso che questo esempio potrebbe essere antiquato, quindi volevo avere un feedback qui.Utilizzo degli argomenti della riga di comando in Python: Understanding sys.argv

sto usando Python 3,1

from sys import argv 

script, first, second, third = argv 

print("the script is called:", (script)) 
print("your first variable is:", (first)) 
print("your second variable is:", (second)) 
print("your third variable is:", (third)) 

sto ottenendo questo errore:

Traceback (most recent call last): 
    File "/path/ch13.py", line 3, in <module> 
    script, first, second, third, bacon = argv 
ValueError: need more than 1 value to unpack 

Qualche idea di cosa c'è che non va?

risposta

8

Hai dimenticato di passare argomenti allo script, ad es. foo.py bar baz quux.

enter image description here

+0

Sono un noob, qual è il modo corretto di farlo con il codice che ho scritto? –

+0

'foo.py bar baz quux' –

+0

Ha detto che devi eseguire la riga di comando in questo esercizio. Apri CMD (Finestra) e digita: ex13.py script_value first_value second_value third_value –

3

sys.arg è un elenco di parametri della riga di comando. È necessario passare effettivamente i parametri della riga di comando allo script per compilare questo elenco. Fate questo sia nelle impostazioni di progetto del vostro IDE o eseguendo in questo modo sulla riga di comando:

python script.py first second third 

Si noti che il primo argomento è sempre il nome dello script (python script.py in questo caso). A causa dell'utilizzo del disimballaggio, riceverai un ValueError ogni volta che passi meno o più di 3 parametri. È possibile controllare il numero prima di disimballare utilizzando len(argv)-1 e presentare un errore appropriato, se non 3.

Su una nota correlata, esaminare getopt se è necessario eseguire il passaggio di argomenti più complessi.

4

Per passare gli argomenti, è necessario eseguire lo script in questo modo:

python fileName.py argument1 argument2 

seconda del numero di variabili si deve = a argv, questo è il numero è necessario avere meno la prima argomento (sceneggiatura). Ad esempio,

script, first, second, third = argv 

dovrebbe avere 3 argomenti.

0

Stai cercando di decomprimere lo argv in valori separati. La decompressione richiede che l'esatta quantità di valori corrisponda alla dimensione del valore da decomprimere. Considerate questo:

a, b, c = [1, 2, 3] 

funziona bene, ma questo:

a, b, c, d, e = [1] 

vi darà lo stesso brutto errore, che è appena prodotto. Disimballare sys.argv nel modo in cui l'hai fatto è particolarmente brutto, perché è l'input dell'utente, e non sai, quanti argomenti forniranno gli utenti del tuo script. Quindi dovresti disimballarlo con più attenzione:

if len(argv) == 5: 
    script_name, a, b, c, d = argv 
else: 
    print "This script needs exactly four arguments, aborting" 
    exit() 
0

Tutto ciò che devi fare è digitare tre cose quando apri lo script. Ad esempio, esegui python (quindi il tuo nomefile.py) 1 2 3. I "1, 2 e 3" possono essere sostituiti con tre numeri o parole.

0

Per eseguire questo script sulla riga di comando, è necessario utilizzare tre argomenti. Si dovrà digitare qualcosa di simile al seguente:

python /path/ch13.py first second third 
0

Eseguire il codice come questo:

python ch13.py first second third 
0
from sys import argv 
a, b, c, d = argv 
print "The script is called:", a 
print "Your first variable is:", b 
print "Your second variable is:", c 
print "Your third variable is:", d 

Salva questo script come: s.py

eseguire questo script dal terminale come segue: enter image description here

0

Si può fare

(script, first, second, third) = argv 

e passare 3 argomenti

python filename arg1 arg2 arg3 

quando lo si esegue da linea di comando.

Sto usando Python 3.6.0. Prima non stavo avvolgendo gli argomenti argv in parentesi graffe. Ma ora funziona.

you can check it here

+1

grazie a @paul .. Non conoscevo la formattazione. – beat7Bx