Exécuter un script python avec une partie de l'argument qui sont en option

Je suis passé par le sys documentation, toutefois il y a quelque chose qui n'est pas encore clair pour moi. J'ai cherché une question similaire sur stackoverflow, mais je n'ai pas trouver quelque chose d'utile (clairement toute référence est appréciée!).

Je veux créer un script - dire foo.py - dans laquelle je veux passer de 3 à 6 arguments:

$ python foo.py arg1 arg2 arg3

Les 3 premiers arguments doit être donnée dans tous les cas; les 3 derniers arguments sont utilisés dans une fonction qui ont valeur par défaut des arguments si rien ne s'est passé.

La question est de savoir comment dois-je faire? Jusqu'à présent, je pensais à écrire quelque chose comme ce qui suit foo.py (ceci est un simple exemple, uniquement dans le but d'avoir quelque chose de concret à l'appui de ma question):

import sys

def example(credit_mom, credit_dad, debt_mom, debt_dad = 1000,
            salary = 2000, bonus = 0):
    total_gain = salary + credit_dad + credit_mom + bonus
    total_loss = debt_dad + debt_mom

    return total_gain - total_loss

if __name__ == '__main__':
    if len(sys.argv) < 4:
        sys.exit('Need at least 3 arguments. The order is as follows:\n\
            1.credit_mom;\n\
            2.credit_dad;\n\
            3.debt_mom;\n\
            4.others')
    else:
        sys.exit(example(sys.argv[1],
                         sys.argv[2],
                         sys.argv[3],
                         sys.argv[4],
                         sys.argv[5],
                         sys.argv[6]))

Si j'exécute ce script, j'ai clairement obtenir un IndexError exception:

$ python foo.py 110 110 220
Traceback (most recent call last):
  File "foo.py", line 19, in <module>
    sys.argv[4],
IndexError: list index out of range
Je vous suggère d'utiliser argparse (et voici le tutoriel ). Vous évite d'avoir à vérifier manuellement l'existence de paramètres.
merci! J'ai commencer à passer par le tutoriel immédiatement

OriginalL'auteur rafforaffo | 2015-02-12