2010-11-15 5 views
14

Je peux appeler mon script comme ceci:Comment vérifier si un argument de la ligne de commande a été défini?

python D:\myscript.py 60 

Et dans le script que je peux faire:

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

Mais comment pourrais-je tester si l'argument a été inscrit dans l'appel de ligne de commande? Je dois faire quelque chose comme ceci:

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

vérifier si argv [1] est nul, désolé, je pensais que c'était implicite que je parlais l'argument 1. – Jim

+1

@ Jim 'sys.argv' n'est pas nul, il contient au moins le nom du script comme' sys.argv [0] ' – khachik

Répondre

31

N'utilisez pas sys.argv pour gérer l'interface de ligne de commande; il y a un module pour le faire: argparse.

Vous pouvez marquer un argument si nécessaire en transmettant required=True à add_argument.

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

+1 parce que argparse est incroyable. – GWW

+3

Si les besoins sont très simples, existe-t-il réellement quelque chose de mal * à l'aide de 'sys.argv'? – Jonik

+0

bonne solution pour ce problème! – Jim

-7

if(sys.argv[1]): devrait fonctionner correctement, s'il n'y a pas des arguments de [1] sera (devrait être) de null

+0

Cela donnera un indice de liste hors limites si cette valeur n'est pas définie. – GWW

+0

Il tombera avec 'IndexError' – khachik

+4

Non cela ne fonctionnera pas, car l'index est hors de portée. –

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

Si vous utilisez Python 2.7/3.2, utilisez le module argparse. Sinon, utilisez le module optparse. Le module prend en charge l'analyse de la ligne de commande et vous pouvez vérifier si le nombre d'arguments positionnels correspond à ce que vous attendez.

0

J'utilise optparse module pour cela, mais je suppose que parce que je suis en utilisant 2.5, vous pouvez utiliser argparse comme Alex suggère si vous utilisez 2.7 ou plus

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

Vous pouvez l'utiliser pour stocker l'argument dans la liste et utilisés leur. Est plus sûr moyen que de les utiliser comme celui-ci sys.argv[n]

Aucun problème si aucun argument ne donne

Questions connexes