web-dev-qa-db-fra.com

argument vide en python

comment puis-je imprimer les informations d'aide si aucun argument n'est transmis au script 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"

ce qui me manque, c'est la ligne if arg == "" que je ne sais pas comment exprimer :( 

18
sfsd
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 n'a qu'un seul élément, il ne doit y avoir aucun argument.

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

21
Josh Wright
if len(sys.argv)<2:

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

13
AJ.

Comme d'autres l'ont dit, vous pouvez vérifier si des arguments ont été transmis:

#!/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, il existe un module Python appelé OptParse qui a été développé explicitement pour analyser les arguments de ligne de commande lors de l'exécution d'un script. Je suggérerais d'examiner cela, car il est un peu plus "conforme aux normes" (comme dans, c'est la méthode attendue et acceptée d'analyse en ligne de commande au sein de la communauté Python).

6
Mike Trpcic

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

import sys

try:   
   sys.argv[1:] // do something with sys.argv[1:]  
except IndexError:  
   print "usage is..."
   sys.exit()
4
bogna.ka
#!/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"
1
Noctis Skytower

Je vous recommande d'utiliser la lib optparse [1], c'est plus élégant: D

[1] Analyseur d'options de ligne de commande plus puissant < http://docs.python.org/library/optparse.html >

1

Basé sur 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"
1
John La Rooy
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
0
dragon