2010-11-15 11 views
14

posso chiamare il mio script come questo:Come verificare se è stato impostato un argomento dalla riga di comando?

python D:\myscript.py 60 

E nello script che posso fare:

arg = sys.argv[1] 
foo(arg) 

Ma come potevo verificare se l'argomento è stato inserito nella linea di chiamata di comando? Ho bisogno di fare qualcosa di simile:

if isset(sys.argv[1]): 
    foo(sys.argv[1]) 
else: 
    print "You must set argument!!!" 
+0

controllo se argv [1] è nullo, mi dispiace ho pensato che fosse implicito che stavo parlando di argomento 1. – Jim

+1

@ Jim 'sys.argv' non è nullo, contiene almeno il nome dello script come' sys.argv [0] ' – khachik

risposta

31

Non utilizzare sys.argv per la gestione dell'interfaccia della riga di comando; c'è un modulo per farlo: argparse.

È possibile contrassegnare un argomento come richiesto passando required=True a add_argument.

import argparse 
parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("foo", ..., required=True) 
parser.parse_args() 
+6

+1 perché argparse è sorprendente. – GWW

+3

Se i bisogni sono molto semplici, c'è effettivamente qualcosa * sbagliato * con l'uso di 'sys.argv'? – Jonik

+0

buona soluzione per questo problema! – Jim

-7

if(sys.argv[1]): dovrebbe funzionare bene, se non ci sono argomenti sys.argv [1] sarà (dovrebbe essere) null

+0

Questo darà un errore di indice di lista fuori limite se tale valore non è impostato. – GWW

+0

Cadrà con 'IndexError' – khachik

+4

No, non funzionerà, perché l'indice è fuori portata. –

19
if len(sys.argv) < 2: 
    print "You must set argument!!!" 
5

Se si utilizza Python 2.7/3.2, utilizzare il modulo argparse. Altrimenti, utilizzare il modulo optparse. Il modulo si occupa di analizzare la riga di comando e puoi verificare se il numero di argomenti posizionali corrisponde a quello che ti aspetti.

0

Io uso optparse module per questo, ma credo perché sto usando 2.5 è possibile utilizzare argparse come suggerito Alex se si utilizza 2.7 o superiore

0
for arg in sys.argv: 
    print (arg) 
    #print cli arguments 

Si può usare per archiviare l'argomento in lista e usati loro. È il modo più sicuro di quanto a loro usato come questo sys.argv[n]

Nessun problema se nessun argomento è dato

Problemi correlati