2010-02-03 19 views
15

Jak wydrukować informacje pomocy, jeśli żadne argumenty nie są przekazywane do skryptu Pythona?python pusty argument

#!/usr/bin/env python 

import sys 

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

co mi brakuje to if arg == "" linia że nie wiem jak wyrazić :(

Odpowiedz

11
if len(sys.argv)<2: 

nazwa programu jest zawsze w sys.argv [0]

+2

bym po prostu powiedział '== 1 ', ale to wszystko jest takie same. –

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

Pierwszym elementem sys.argv jest zawsze nazwa samego skryptu lub pusty ciąg znaków.Jeśli sys.argv ma tylko jeden element, wówczas nie było żadnych argumentów.

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

"jeśli", po którym następuje "za", wydaje mi się nieco zbędne. Dodałem odmianę twojej odpowiedzi, aby pokazać, co mam na myśli. –

1

podstawie odpowiedzi Noctis SkyTower za

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

Wystąpił problem z twoim drugim przykładem. Musisz przerwać przed wejściem do bloku 'else', jeśli nie chcesz, aby działał. –

+0

@Noctis Skytower. Tak, masz rację, usuń go. –

5

Jak mówili inni, można sprawdzić, czy jakieś argumenty zostały przekazane w wykonując:

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

Jednak nie to moduł Pythona o nazwie OptParse, który został opracowany jawnie do analizowania argumentów wiersza poleceń podczas uruchamiania skrypt. Sugerowałbym zajrzeć do tego, ponieważ jest on nieco bardziej "zgodny z normami" (w tej wersji jest to oczekiwana i akceptowana metoda parsowania linii poleceń w społeczności Pythona).

+1

"Użyj optparse" jest właściwą odpowiedzią na nietrywialne programy. –

4

Poniżej znajduje się bardzo pythonowy sposób rozwiązywania problemem, ponieważ celowo generuje wyjątek w try .. z wyjątkiem:

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 
Powiązane problemy