2010-11-15 18 views
14

mogę nazwać mój skrypt tak:Jak sprawdzić, czy ustawiony został argument z wiersza poleceń?

python D:\myscript.py 60 

I w skrypcie mogę zrobić:

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

Ale jak mogę sprawdzić, czy argument został wprowadzony w linii wywołania polecenia? Muszę zrobić coś takiego:

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

sprawdzić, czy argv [1] jest nieważna, przepraszam, myślałem, że to była niejawna że mówiłam o argumencie 1. – Jim

+1

@ Jim 'sys.argv' nie ma wartości null, zawiera co najmniej nazwę skryptu jako' sys.argv [0] ' – khachik

Odpowiedz

31

Nie używaj sys.argv do obsługi interfejsu wiersza poleceń; istnieje moduł do wykonania tego: argparse.

Można oznaczyć argument zgodnie z wymaganiami, przekazując required=True do add_argument.

import argparse 
parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("foo", ..., required=True) 
parser.parse_args() 
+6

+1, ponieważ argparse jest niesamowity. – GWW

+3

Jeśli potrzeby są bardzo proste, czy w rzeczywistości istnieje coś * nie tak z użyciem 'sys.argv'? – Jonik

+0

dobre rozwiązanie dla tego problemu! – Jim

-7

if(sys.argv[1]): powinien działać dobrze, jeśli istnieją żadne argumenty sys.argv [1] będzie (powinien być) null

+0

To spowoduje, że indeks listy poza granicami błędu zostanie usunięty, jeśli ta wartość nie zostanie ustawiona. – GWW

+0

Upadek z 'IndexError' – khachik

+4

Nie, to nie zadziała, ponieważ indeks jest poza zakresem. –

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

Jeśli używasz Pythona 2.7/3.2, należy użyć modułu argparse. W przeciwnym razie użyj modułu optparse. Moduł zajmuje się parsowaniem wiersza poleceń i można sprawdzić, czy liczba argumentów pozycyjnych pasuje do oczekiwanych.

0

używam optparse module do tego, ale myślę, bo używam 2.5 można użyć argparse jako Alex zaproponował jeśli używasz 2.7 lub większą

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

Można go używać do przechowywania argument w liście i używane im. Jest bardziej bezpieczny sposób niż je stosować jak to sys.argv[n]

żadnych problemów, jeśli nie podano żadnych argumentów

Powiązane problemy