La risposta di Martijen ha senso, ma mancava qualcosa di cruciale che potrebbe sembrare ovvio agli altri ma che per me era difficile da capire.
Nella versione in cui usi argparse, devi avere questa riga nel corpo principale.
args = parser.parse_args(args)
Normalmente, quando si utilizza argparse solo in uno script, è sufficiente scrivere
args = parser.parse_args()
e parse_args trova gli argomenti dalla riga di comando. Ma in questo caso la funzione main non ha accesso agli argomenti della riga di comando, quindi devi dire ad argparse quali sono gli argomenti.
Ecco un esempio
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:])
Supponendo che tu abbia chiamato questo mytest.py Per eseguirlo puoi fare uno di questi dalla riga di comando
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
che ritorna rispettivamente
X center: 8.0
Y center: 4
o
X center: 8.0
Y center: 2.0
o
X center: 2
Y center: 4
O se vuoi eseguire da un altro script Python puoi farlo
import mytest
mytest.main(["-x","7","-y","6"])
che ritorna
X center: 7.0
Y center: 6.0
myModule.main()
. Cosa hai provato fino ad ora?