La réponse de Martijen est logique, mais il lui manquait un élément crucial qui peut sembler évident pour d'autres mais que j'ai eu du mal à comprendre.
Dans la version où vous utilisez argparse, vous devez avoir cette ligne dans le corps principal.
args = parser.parse_args(args)
Normalement, lorsque vous utilisez argparse juste dans un script, vous écrivez simplement
args = parser.parse_args()
et parse_args trouvent les arguments de la ligne de commande. Mais dans ce cas, la fonction principale n'a pas accès aux arguments de la ligne de commande, donc vous devez dire à argparse quels sont les arguments.
Voici un exemple
import argparse
import sys
def x(x_center, y_center):
print "X center:", x_center
print "Y center:", y_center
def main(args):
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False)
parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False)
args = parser.parse_args(args)
x(args.xcenter, args.ycenter)
if __name__ == '__main__':
main(sys.argv[1:])
En supposant que vous l'ayez nommé mytest.py. Pour l'exécuter, vous pouvez faire l'une des choses suivantes à partir de la ligne de commande
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
qui renvoie respectivement
X center: 8.0
Y center: 4
o
X center: 8.0
Y center: 2.0
o
X center: 2
Y center: 4
Ou si vous voulez exécuter à partir d'un autre script de python vous pouvez faire
import mytest
mytest.main(["-x","7","-y","6"])
qui renvoie
X center: 7.0
Y center: 6.0