2016-06-14 2 views
0

Ich bin neu in Python und die Syntax wirft mich wirklich ab. Ich muss ein Skript ausführen, in dem ich eine Funktion basierend auf den Argumenten ausführen möchte, die über die Befehlszeile übergeben werden. Im Folgenden ist der Pseudo-Code:Python ausführen if/else-Anweisung basierend auf sys.argv übergeben über die Befehlszeile

import sys 

... 
Code 
Authentication 
Role Validation 
... 

Arg[1] 
Arg[2] 
Arg[3] 

if(Arg[3] !exist) 
    execute Func1 with Arg[1] & Arg[2] 
else if 
    execute Func 2 with Arg[1], [2] & [3] 

Kann mich jemand führen, wie diese Welt in Python zu strukturieren oder ob es eine andere Möglichkeit, es zu tun?

+1

Warum versuchen Sie zuerst, einige Tutorials zu tun? – drum

+0

Klingt wie ein Modell für ArgParse .. haben Sie ein Google! .. LMGTFY https://docs.python.org/3/library/argparse.html – AK47

+0

Änderung zu @drum: Ich schlage vor, auf 'sys.argv' zu konzentrieren, 'len (sys.argv) <4',' def doing_this (a, b): ... ',' 'f',' elif', in den Tutorials z. auf Python.org - und dann zurückkommen, wenn du eine Wand triffst.Die Programmierer hier werden dir dann gerne helfen, die nächste Wand vorzubereiten/zu finden ;-) – Dilettant

Antwort

2

Wenn Sie sys.argv verwenden müssen, es ist nur eine normale Python list Sie len darauf verwenden können, um zu überprüfen, wie viele Argumente übergeben wurden (denken Sie daran, das 0 te Element ist das Programm selbst).

if len(sys.argv) == 3: 
    func1(*sys.argv[1:3]) # * unpacking removes repeated references to sys.argv 
elif len(sys.argv) == 4: 
    func2(*sys.argv[1:4]) 

Ich würde empfehlen, wenn bei so etwas wie the argparse module suchen; Es ist mehr Arbeit zu lernen, aber es bedeutet, dass Ihre Skripte automatisch -h/--help Unterstützung erhalten, was es viel einfacher macht, das Skript zu verwenden, ohne eine separate Verwendungsnachricht zu implementieren und zu riskieren, dass es nicht mehr synchron läuft.

Alternativ, wenn Sie für die Verwendung von Drittanbieter-Pakete sind, docopt wird allgemein als eine Alternative zu argparse gelobt.

+0

Vielen Dank! Das hat funktioniert! –

1

Ich glaube, das ist, was Sie suchen. sys.argv ist die Liste mit Ihren Befehlszeilenargumenten. sys.argv[0] ist normalerweise der Befehl, den Sie ausgeführt haben, also interessieren Sie sich für die danach.

if len(sys.argv) == 4: 
    execute Func 2 with sys.argv[1], sys.argv[2] & sys.argv[3] 
elif len(sys.argv) == 3: 
    execute Func1 with sys.argv[1] & sys.argv[2] 
1

sys.argv erhalten Sie die Argumente das Skript mit e aufgerufen wurde. G. Wenn Sie Ihr Skript wie folgt ausführen:

pytohn script.py arg1 arg2 

sys.argv wird:

["script.py", "arg1", "arg2"] 

Auch die eingebaute len Funktion, um die Länge eines Arrays zurück. Also für das obige Beispiel sollte len3 sein.

Mit diesem Wissen sollten Sie in der Lage sein, Ihren Code zu schreiben.

Wenn Sie kämpfen immer dies hier zu arbeiten, ist ein Hinweis:

import sys 
arg = sys.argv 

if len(arg) == 3: 
    func1(arg[1], arg[2]) 

elif len(arg) == 4: 
    func2(arg[1], arg[2], arg[3]) 
1

Die einfachste Sache, die tut, was Sie fragen, könnte an der Länge der Liste von sys.argv

import sys 

def func1(a, b): 
    print "func1", a, b 

def func2(a, b, c): 
    print "func2", a, b, c 

if __name__ =='__main__': 
    if len(sys.argv) == 3: 
     func1(sys.argv[1], sys.argv[2]) 
    elif len(sys.argv) == 4: 
     func2(sys.argv[1], sys.argv[2], sys.argv[3]) 

gegeben sieht Sie scheinen die erste arg bemerkt zu haben, ist das Programm selbst. Denken Sie darüber nach, was passiert, wenn die falsche Anzahl von Argumenten übergeben wird. Werfen Sie einen Blick auf die argparsemodule

Verwandte Themen