2010-02-03 6 views
15

Comment imprimer des informations d'aide si aucun argument n'est transmis au script python?python argument vide

#!/usr/bin/env python 

import sys 

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

ce que je suis absent est la ligne if arg == "" que je ne sais pas comment exprimer :(

Répondre

11
if len(sys.argv)<2: 

Le nom du programme est toujours en sys.argv [0]

+2

je viens de dire '== 1' mais il est tout de même. –

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

Le premier élément de sys.argv est toujours soit le nom du script lui-même, soit une chaîne vide Si sys.argv ne possède qu'un seul élément, alors il ne doit pas y avoir d'arguments

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

le 'if' suivi du' for' me semble un peu redondant. J'ai ajouté une variation de votre réponse pour montrer ce que je veux dire –

1

Sur la base de la réponse 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

Il y a un problème avec votre deuxième exemple. Vous devez casser avant d'entrer dans le bloc 'else' si vous ne voulez pas qu'il fonctionne. –

+0

@Noctis Skytower. Oui, vous avez raison, je vais le supprimer –

5

Comme d'autres l'ont dit, vous pouvez vérifier si les args ont été adoptées en en faisant:

#!/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" 

Cependant, est un module Python appelé OptParse qui a été développé explicitement pour analyser les arguments de la ligne de commande lors de l'exécution un script. Je suggérerais d'examiner cela, car c'est un peu plus "conforme aux normes" (Comme dans, c'est la méthode attendue et acceptée de l'analyse de la ligne de commande au sein de la communauté Python).

+1

"Use optparse" est la bonne réponse pour les programmes non-trivial. –

4

Ce qui suit est un moyen très Pythonic de résoudre votre problème, car il génère délibérément une exception dans l'essayer .. sauf:

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 
Questions connexes