2010-11-15 8 views
14

puedo llamar a mi script como el siguiente:¿Cómo comprobar si se ha establecido un argumento desde la línea de comandos?

python D:\myscript.py 60 

Y en la secuencia de comandos que puedo hacer:

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

Pero ¿cómo podría probar si el argumento se ha introducido en la llamada línea de comandos? Necesito hacer algo como esto:

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

verificación si argv [1] es nulo, lo siento, pensé que era implícito de que yo estaba hablando de argumento 1. – Jim

+1

@ Jim 'sys.argv' no es nulo, contiene al menos el nombre del script como' sys.argv [0] ' – khachik

Respuesta

31

No use sys.argv para manejar la interfaz de línea de comando; hay un módulo para hacer eso: argparse.

Puede marcar un argumento según sea necesario pasando 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 porque argparse es increíble. – GWW

+3

Si las necesidades son muy simples, ¿hay algo * incorrecto * con el uso de 'sys.argv'? – Jonik

+0

¡buena solución para este problema! – Jim

-7

if(sys.argv[1]): debería funcionar bien, si no hay argumentos sys.argv [1] será (debería ser) null

+0

Eso dará un error de índice de lista fuera de límites si ese valor no está establecido. – GWW

+0

Caerá con 'IndexError' – khachik

+4

No, eso no funcionará, porque el índice está fuera de rango. –

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

Si está utilizando Python 2.7/3.2, utilice el módulo argparse. De lo contrario, use el módulo optparse. El módulo se encarga de analizar la línea de comandos y puede verificar si el número de argumentos posicionales coincide con lo que espera.

0

utilizo optparse module para esto, pero supongo que porque estoy usando 2.5 se puede utilizar argparse como se sugiere Alex si está utilizando 2.7 o mayor

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

Se puede utilizar para almacenar el argumento de la lista y se utiliza ellos. Es la forma más segura de lo que usa como esto sys.argv[n]

No hay problemas si no hay argumentos se dan

Cuestiones relacionadas