2016-06-14 1 views
0

Je suis novice en Python et la syntaxe me décourage vraiment. J'ai besoin d'exécuter un script dans lequel je voudrais exécuter une fonction basée sur les arguments passés sur la ligne de commande. Voici le code pseudo:Python exécute l'instruction if/else basée sur sys.argv passée sur la ligne de commande

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] 

Quelqu'un peut-il me guider la façon de structurer ce dans le monde de Python ou s'il y a une autre façon de le faire?

+1

Pourquoi essayez-vous d'abord de faire quelques tutoriels? – drum

+0

Semble comme un modèle pour ArgParse .. avoir un google! .. LMGTFY https://docs.python.org/3/library/argparse.html – AK47

+0

Amending to @drum: Je suggère de se concentrer sur 'sys.argv', 'len (sys.argv) <4',' def faire_ce (a, b): ... ',' ìf', 'elif', dans les tutoriels par exemple. sur python.org - et revenez si vous frappez un mur.Les codeurs ici seront alors ravis de vous aider à préparer/trouver le prochain mur ;-) – Dilettant

Répondre

2

Si vous devez utiliser sys.argv, il est juste un Python normale list, vous pouvez utiliser len sur pour vérifier le nombre d'arguments ont été adoptées (souvenez-vous, l'élément 0 e est le programme lui-même).

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]) 

Je recommanderais cependant de regarder quelque chose comme the argparse module; c'est plus de travail à apprendre, mais cela signifie que vos scripts obtiennent automatiquement le support -h/--help, ce qui facilite beaucoup l'utilisation du script, sans implémenter un message d'utilisation séparément, ce qui risque de le désynchroniser. Alternativement, si vous êtes prêt à utiliser des paquets tiers, docopt est généralement loué comme une alternative à argparse.

+0

Merci! Cela a fonctionné! –

1

Je crois que c'est ce que vous cherchez. sys.argv est la liste contenant vos arguments de ligne de commande. sys.argv[0] est généralement la commande que vous avez exécutée, vous êtes donc intéressé par ceux qui suivent.

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 vous obtiendrez les arguments du script a été appelé avec e. g. si vous exécutez votre script comme ceci:

pytohn script.py arg1 arg2 

sys.argv sera:

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

également la fonction len builtin renverra la longueur d'un tableau. Donc, pour l'exemple ci-dessus len devrait être 3. En sachant cela, vous devriez être capable d'écrire votre code.

Si vous luttez obtenir ceci pour travailler ici est un indice:

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

La chose la plus simple qui fait ce que vous demandez pourrait se penche sur la longueur de la liste donnée par 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]) 

Vous semble avoir remarqué le premier argument est le programme lui-même. Réfléchissez à ce qui devrait arriver si le nombre d'arguments erroné est passé. Jetez un oeil à la argparsemodule