2017-05-10 1 views
1

J'essaye de faire fonctionner un script Python indépendamment du moment où un argument a été passé ou non.Comment faire fonctionner un script python avec et sans arguments (arguments par défaut)?

L'objectif est de rendre le script fonctionnel car "MyPython.py" et "MyPython.py 5" devraient pouvoir fonctionner. Si aucun argument n'a été passé, alors l'argument devrait être 0.

La variable imported_number devrait être 0 par défaut mais si un argument a été détecté, alors il devrait prendre n'importe quel nombre passé par l'utilisateur.

import argparse 

imported_number=0 

parser = argparse.ArgumentParser() 
parser.add_argument("opt_number", type=int, help="Provide a number please") 
args = parser.parse_args() 

if args.opt_number > 0: 
    imported_number=args.opt_number 
    print "You provided me with the number " + imported_number 
    print "You provided me with the number {}".format(args.opt_number) 
else: 
    print "You did not provide me with any number. Taking the default value, which is " + imported_number 

Malheureusement, j'obtiens le message d'erreur error: too few arguments.

Est-ce que quelqu'un connaît des méthodes efficaces et automatisées pour accomplir cette tâche? J'apprécierais.

+1

Avez-vous essayé 'nargs = '?'' Dans 'add_argument'? – khelwood

+1

Définir une valeur [par défaut] (https://docs.python.org/3/library/argparse.html#default)? – jonrsharpe

Répondre

3

Utilisez nargs, default, const comme ceci:

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("opt_number", type=int, help="Provide a number please", 
        nargs='?', default=0, const=0) 
args = parser.parse_args() 
print(args) 

Votre opt_number sera initialisé avec 0 lorsque aucun argument est fourni.

+0

Dans un 'positional' comme ceci,' const', alors qu'il est accepté comme paramètre, ne fait rien. Vous obtenez soit la valeur par défaut ou la valeur utilisateur. Avec un 'optionnel', c'est utile, offrant un choix à 3 voies. – hpaulj

+0

Merci mon pote! C'était le truc que je cherchais. Simple et fonctionnel dans tous les cas. – Unit1

3

Vous pouvez faire de votre script une fonction qui accepte et un argument lui est passé.

import sys 

def your_function(imported_number=0): 
    #your code 
if __name__=='__main__': 
    try: 
     imported_number=sys.argv[1] 
    except: 
     pass 
    your_function(imported_number)