2010-02-03 9 views
15

¿Cómo imprimo la información de ayuda si no se pasan argumentos a la secuencia de comandos python?argumento vacío python

#!/usr/bin/env python 

import sys 

for arg in sys.argv: 
    if arg == "do": 
     do this 
    if arg == "" 
     print "usage is bla bla bla" 

lo que me falta es if arg == "" línea que no sé cómo expresar :(

Respuesta

11
if len(sys.argv)<2: 

El nombre del programa es siempre sys.argv [0]

+2

que tendría acaba de decir '== 1' pero es todo lo mismo. –

20
if len(sys.argv) == 1: 
    # Print usage... 

El primer elemento de sys.argv es siempre el nombre del script en sí o una cadena vacía. Si sys.argv tiene solo un elemento, no debe haber ningún argumento.

http://docs.python.org/library/sys.html#sys.argv

1
#!/usr/bin/env python 

import sys 
args = sys.argv[1:] 

if args: 
    for arg in args: 
     if arg == "do": 
      # do this 
else: 
    print "usage is bla bla bla" 
+0

el 'if' seguido de' for' me parece un poco redundante. Agregué una variación de su respuesta para mostrar lo que quiero decir –

1

Sobre la base de la respuesta de Noctis skytower

import sys 
args = sys.argv[1:] 

for arg in args: 
    if arg == "do": 
     # do this 

if not args: 
    print "usage is bla bla bla" 
+0

Hay un problema con su segundo ejemplo. Tienes que romper antes de ingresar al bloque 'else' si no quieres que se ejecute. –

+0

@Noctis Skytower. Sí, tienes razón, lo borraré –

5

Como otros han dicho, se puede averiguar si hay alguna args se aprobaron en haciendo:

#!/usr/bin/env python 

import sys 
args = sys.argv[1:] 

if args: 
    for arg in args: 
     if arg == "do": 
      # do this 
else: 
    print "usage is bla bla bla" 

Sin embargo, hay es un módulo de Python llamado OptParse que se desarrolló explícitamente para analizar los argumentos de la línea de comando cuando se ejecuta un guión. Sugeriría investigar esto, ya que es un poco más "compatible con los estándares" (Como en, es el método esperado y aceptado de análisis de línea de comando dentro de la comunidad de Python).

+1

"Usar optparse" es la respuesta correcta para programas no triviales. –

4

La siguiente es una manera muy Pythonic de la solución de su problema, ya que genera deliberadamente una excepción dentro de intentarlo .. excepto:

import sys 

try: 
    sys.argv[1:] // do sth with sys,argv[1:] 
except IndexError: 
    print "usage is..." 
    sys.exit() 
0
import argparse 

def parse_args(): 
    parser = argparse.ArgumentParser(
     add_help=True, 
    ) 

    # your arguments here 

    if len(sys.argv) == 1: 
     parser.print_help() 
     sys.exit(0) 
    else: 
     options = parser.parse_args() 

    return options 
Cuestiones relacionadas